查找inode编号的便携式方法

l0b*_*0b0 10 shell inode

起初我使用stat -c %i file(帮助检测 jail 的存在),它似乎适用于阳光下的任何 Linux 发行版。在 OS X 上,我不得不使用ls -i file | cut -d ' ' -f 1.

是否有某种方法可以在可跨 *nix 平台移植且不依赖于众所周知的反复无常的 shell 脚本中找到文件的 inode 编号ls

l0b*_*0b0 11

可能的解决方案:POSIX 规范ls指定-i,所以也许它是可移植的。难道一个流行的实现的任何人都知道ls这不支持这一点,或把它打印从下面的例子中以不同的方式:

$ ls -di /
2 /
Run Code Online (Sandbox Code Playgroud)

  • @jlliagre:请在发帖前阅读。`stat` 命令在 OS X 上不起作用,`ls -di` 对两者都起作用。 (3认同)
  • 有_are_ 例外:`ls` 与`-i` 前垫至少在Solaris 10(可能是Solaris 11,我没有检查过)上有空格。看起来这是回到 Unix 版本 7 的传统行为,所以我怀疑很多公司 *nix 风格保留了这种行为(尽管我手头只有 Solaris 10)。就我所知,如果您使用正确描述任意空格中的字段的东西(因此,不是 `cut`,而是例如 `awk` 或只是 shell 自己的字段拆分),那么它是可移植的,可以期待 _first_ 非-空白字符串作为 inode 编号。 (2认同)