【问题标题】:How can I access file by inode on Linux如何在 Linux 上通过 inode 访问文件
【发布时间】:2015-07-15 11:03:33
【问题描述】:

是否有任何用户空间 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用户下运行,因此没有安全要求进行权限检查。

【问题讨论】:

  • 可能不会,你为什么要问?这看起来像是一场可靠性的噩梦。所以这肯定是一个坏主意
  • @BasileStarynkevitch 我正在实现一个 fuse 程序,它需要操作远程文件系统,fuse 低级 API 与 i-node 编号一起使用。但是,fuse 高级 API 可以使用 path,但我认为会有一些性能损失。
  • 很好的答案,理由是“为什么?” :stackoverflow.com/a/36092651/544721

标签: c linux filesystems kernel ext4


【解决方案1】:

我发现了与类似主题here相关的问题。

总结一下,看看这些命令:

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

希望这有助于您进一步调查。

【讨论】:

    【解决方案2】:

    不确定我是否正确理解了您的问题,但是:
    您可以从“/”目录开始,然后递归(或任何循环)与孩子一起进行。将 inode 值与 strcut stat.ino_t 进行比较。找到后,打开路径/文件。

    【讨论】:

      【解决方案3】:

      我不知道是否有更简单的方法,但您可以使用 bash 来做到这一点。使用 ls -i 命令你也可以看到 inode,

      $ ls -i
      11147622 file.txt
      

      第一列是inode编号,blow命令显示当前目录下的inode

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

      所以你需要检查 / 的所有子目录中的 inode 直到找到它

      ls -iR /
      

      它显示了所有子目录以及带有 inode 编号的文件

      现在您应该从 / 开始并使用 awk to 或 cut 命令获得第一列(inode 编号在第一列中),然后将其与您要查找的 inode 进行比较。

      【讨论】:

        猜你喜欢
        • 2016-07-05
        • 2017-01-14
        • 2011-05-21
        • 2015-01-15
        • 2017-08-27
        • 2017-05-06
        • 1970-01-01
        • 2011-07-24
        • 1970-01-01
        相关资源
        最近更新 更多