如何只通过知道文件的inode来检索bash中的文件内容?
答案 0 :(得分:5)
您无法通过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
)。