为什么 unix 的 du(1) 命令不支持 -i 进行 inode 测量?

为什么 unix 的 du(1) 命令不支持 -i 进行 inode 测量?

是不是因为在用户空间中从文件名转换为 inode 编号很困难,而您无法从那里读取 inode?

答案1

GNU coreutils 的 du(1) 实现将在下一个版本 (>8.21) 中支持 --inodes 选项...我刚刚将补丁推送到上游 Git (http://git.sv.gnu.org/cgit/coreutils.git/commit/?id=333dc83d)。 看http://lists.gnu.org/archive/html/coreutils/2013-07/msg00087.html

答案2

使用df,不是du

du代表“磁盘使用情况”。它df代表“磁盘空闲”,将检查文件系统是否正确。包括 inode 使用情况和选项-i

否则,只需这样做:

find thedirectory -exec ls -di {} \;|awk '{print $1}'|sort|uniq|wc -c

或类似

答案3

这不会给出确切的答案 - 特别是它将目录条目等同于文件,因此重复计算硬链接,以及在文件/目录名称中存在换行符的问题 - 但对于大多数目的来说可能“足够好”:

find /data | awk -F/ '{s=""; for (i=2; i<NF;i++) {s = s"/"$i; print s}}' | sort | uniq -c | sort -n

按 inode(原文如此)计数排序。如果您想要传统的目录排序顺序:

find /data | awk -F/ '{s=""; for (i=2; i<NF;i++) {s = s"/"$i; print s}}' | sort | uniq -c | sort -k2

最常见的情况是,当驱动器的 inode 用完时,我需要这样的信息,并且我想知道它们被用在了哪里。为此,一些小的误差通常不是什么大问题。

如果您想要更准确的东西,应该可以使用“find -ls”并解析列表中的 inode 编号以消除重复。

相关内容