如何在bash中通过inode获取文件内容?

use*_*271 4 filesystems bash inode

如何通过只知道文件的inode来检索bash中的文件内容?

Ini*_*ian 6

如果您有访问findfind (GNU findutils)没有POSIX find,你可以用它 -inum选择了它,

-inum n
       File  has  inode  number  n.   It  is normally easier to use the 
       -samefile test instead
Run Code Online (Sandbox Code Playgroud)

只需将它与-exec选项一起使用并使用打开文件cat

find . -inum 1346087 -exec cat {} \;
Run Code Online (Sandbox Code Playgroud)

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

ls -id sample.txt
1346087 sample.txt
Run Code Online (Sandbox Code Playgroud)


Der*_*lin 5

根据这个unixexchange答案:

您无法通过inode访问文件,因为这会通过权限中断访问控制.例如,如果您没有遍历目录的权限,则无论文件的权限是什么,您都无法访问该目录中的任何文件.如果您可以通过inode访问文件,那将绕过目录权限.

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

find有一个inum参数来查找inode文件.这是一个例子:

find -inum 1704744 -exec cat {} \;
Run Code Online (Sandbox Code Playgroud)

这将使用inode打印文件的内容1704744,假设它位于当前目录或其子项之一.

注意:ls还有一个-i选项可以获取与文件关联的inode.


Cyr*_*rus 5

使用ext2 / ext3 / ext4文件系统获取inode:

inode=262552
device=/dev/sda1
sudo debugfs -R "ncheck $inode" $device 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

输出(示例):

索引节点路径名
262552 / var / log / syslog

显示文件内容:

sudo debugfs -R "ncheck $inode" $device 2>/dev/null | awk '/[1-9]/ {print $2}' | xargs cat
Run Code Online (Sandbox Code Playgroud)

  • debugfs 还有一个 `cat` 命令,它接受 inode 编号并读取相应的文件内容:`debugfs -D -R 'cat <8>' /dev/sda3`。有关更多信息,请参阅[此答案](https://unix.stackexchange.com/questions/92816/can-a-file-be-retrieved-by-its-inode#635441)。 (2认同)