【问题标题】:How to get file contents by inode in Bash?如何在 Bash 中通过 inode 获取文件内容?
【发布时间】:2017-08-27 04:56:34
【问题描述】:

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

【问题讨论】:

    标签: bash filesystems inode


    【解决方案1】:

    根据this unixexchange answer

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

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

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

    find -inum 1704744 -exec cat {} \;
    

    这将打印带有 inode 1704744 的文件的内容,假设它位于当前目录或其子目录之一中。

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

    【讨论】:

      【解决方案2】:

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

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

      输出(示例):

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

      显示文件内容:

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

      【讨论】:

      • debugfs 还有一个cat 命令,它接受一个inode 编号并读取相应的文件内容:debugfs -D -R 'cat <8>' /dev/sda3。请参阅this answer 了解更多信息。
      • @MatthiasBraun:感谢您的提示。这让它更容易一些。
      【解决方案3】:

      如果您可以使用find (GNU findutils) 访问find 并且不是 POSIX 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 {} \;
      

      假设我的文件sample.txtinode 值为

      ls -id sample.txt
      1346087 sample.txt
      

      【讨论】:

        【解决方案4】:

        可移植但速度慢的方法是使用find -inum ...,获取给定inode 的文件名,然后在下一步使用找到的文件名。

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

        对于 macOS,它很简单:

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

        例如在 OS X 的 HFS 文件系统中存在伪目录/.vol,您可以使用它们的 inode 号来访问文件内容:

        /.vol/device_id/inode_number
        

        device_id 可从stat 中获得/Volumes 中给定的volume_name,(检查ls /Volumes)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-05
          • 2011-04-01
          • 2020-11-05
          • 1970-01-01
          • 2017-01-16
          相关资源
          最近更新 更多