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

时间:2017-04-02 07:29:49

标签: bash filesystems inode

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

4 个答案:

答案 0 :(得分:5)

根据this unixexchange answer

  

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

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

static void Main(string[] args) { string file_ = "https://www.nseindia.com/content/circulars/CMPT34469.pdf"; string path_ = @"E:\RSR\Office\EEP\FileDownloader\output\Hello_World.pdf"; WebClient wc_ = new WebClient(); wc_.DownloadFile(file_, path_); } 有一个find参数,可以通过inode查找文件。这是一个例子:

inum

这将使用inode find -inum 1704744 -exec cat {} \; 打印文件的内容,假设它位于当前目录或其子项之一。

注意1704744还有一个ls选项,用于获取与文件关联的inode。

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

如果您可以访问find find (GNU findutils) 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 {} \;

假设我的文件inode的{​​{1}}值为

sample.txt

答案 3 :(得分:2)

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

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

对于macOS,它很简单:

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

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

/.vol/device_id/inode_number

可以从device_id中给定stat的{​​{1}}获取volume_name,(检查/Volumes)。