如何在Linux上通过inode访问文件

5
有没有用户空间API或第三方内核模块可以帮助在Linux上通过inode访问文件?
我正在尝试实现类似以下功能:
int read_file_by_ino(int ino, int pos, int size, char* buf);
int write_file_by_ino(int ino, int pos, int size, const char* buf);
int readdir_by_ino(...);
int stat_by_ino(...);
...

该程序预计在root用户下运行,因此没有进行权限检查的安全要求。

可能不是,你为什么问呢?这看起来像是一个可靠性的噩梦。所以肯定是个坏主意。 - Basile Starynkevitch
2
@BasileStarynkevitch 我正在实现一个fuse程序,需要操作远程文件系统,fuse低级API使用i-node号。然而,fuse高级API使用路径,但我认为会有一些性能损失。 - zJay
不错的答案,附有“为什么”的解释: https://dev59.com/zFoV5IYBdhLWcg3wkfa9#36092651 - Grzegorz Wierzowiecki
3个回答

3
我在这里发现了一个关于类似主题的相关问题链接

总结一下,请查看以下命令:

  • find /path/to/mountpoint -inum <inode号码>
  • sudo debugfs -R 'ncheck 393094' /dev/sdaX 2>/dev/null

希望这能帮助您进一步调查。


1
不确定我是否正确理解了您的问题,但是:
您可以从“ /”目录开始,递归地进行(或者使用任何循环),并查找子项。将inode值与strcut stat.ino_t进行比较。一旦找到它,就打开路径/文件。

1

我不知道是否有更简单的方法,但你可以使用bash来完成。使用ls -i命令,你也可以看到索引节点(inodes)。

$ ls -i
11147622 file.txt

第一列是i节点号,下面的命令显示当前目录中的i节点

$ ls -i | awk {'print $1'}

所以你需要检查从 / 目录到其所有子目录中的索引节点,直到找到它。
ls -iR /

它展示了所有子目录和它们的文件以及它们的inode号。
现在,您应该从/开始使用awk或cut命令获取第一列(inode号在第一列),然后将其与您要查找的inode进行比较。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接