2017-04-02 54 views

回答

1

如果你有find (GNU findutils)访问findPOSIX find,你可以用它-inum选择它,

-inum n 
     File has inode number n. It is normally easier to use the 
     -samefile test instead 

只是用它与-exec选项一起打开使用cat的文件,

find . -inum 1346087 -exec cat {} \; 

假设inode我的文件的值为sample.txt

ls -id sample.txt 
1346087 sample.txt 
2

this unixexchange answer

您无法通过索引节点访问文件,因为这会破坏通过权限访问控制。例如,如果您没有遍历目录的权限,则无论文件权限如何,都无法访问该目录中的任何文件。如果您可以通过inode访问文件,则会绕过目录权限。

有一些方法可以通过inode编号获取文件的路径或名称,例如使用find。一旦你获得了一个文件路径,你可以使用任何常规工具。

find有一个inum参数用于通过inode查找文件。这里有一个例子:

find -inum 1704744 -exec cat {} \; 

这将打印索引节点1704744文件的内容,假设它位于当前目录或它的一个子。

注意ls也有一个-i选项以获取与文件关联的inode。

2

获取的inode与EXT2/EXT3/EXT4文件系统:

inode=262552 
device=/dev/sda1 
sudo debugfs -R "ncheck $inode" $device 2>/dev/null 

输出(例如):

 
Inode Pathname 
262552 /var/log/syslog 

要显示文件的内容:

sudo debugfs -R "ncheck $inode" $device 2>/dev/null | awk '/[1-9]/ {print $2}' | xargs cat 
1

便携,但是进展缓慢方法是使用find -inum ...获取给定inode的文件名,并在下一步中使用找到文件名。

如果您只需要该文件的content(通过inode编号),就存在一些文件系统/操作系统特定的解决方案。

对于MacOS的是简单的:

inode=48747714 
eval "$(stat -s "/Volumes/volume_name")" 
cat /.vol/$st_dev/$inode 

例如在OS X的HFS文件系统存在伪目录/.vol,您可以使用由它们的索引节点号访问文件的内容为:在/Volumes

/.vol/device_id/inode_number 

device_id是从stat对于给定的volume_name获得,(检查ls /Volumes)。

相关问题