我的 inode 去哪儿了?

我的 inode 去哪儿了?

我的根文件系统的索引节点已用完。如果这是磁盘空间问题,我会用来du -s获取空间去向的顶层概述,然后沿着目录树查找特定的违规者。 inode 是否有等效选项?

这个问题的答案会指出使用率较高的各个目录,但就我而言,这并不好:例如,Linux 源目录分散在 3000 多个索引节点数较低的目录中,而不是显示为/usr/src/linux-4.0.5 52183.

答案1

从版本 8.22 开始,使用 GNU coreutils(Linux、Cygwin),您可以使用du --inodes,如 lcd047 所指出的。

如果您没有最新的 GNU coreutils,并且树中没有硬链接,或者您不关心每个链接是否计算一次,您可以通过过滤 的输出来获得相同的数字find。如果您想要相当于du -s,即仅顶级目录,那么您所需要做的就是计算每个顶级目录名称的行数。假设文件名中没有换行符并且您只需要当前目录中的非点目录:

find */ | sed 's!/.*!!' | uniq -c

如果要显示所有目录的输出,以及每个目录(包括其子目录)的计数,则需要执行一些算术。

find . -depth | awk '{
    # Count the current depth in the directory tree
    slashes = $0; gsub("[^/]", "", slashes); current_depth = length(slashes);
    # Zero out counts for directories we exited
    for (i = previous_depth; i <= current_depth; i++) counts[i] = 0;
    # Count 1 for us and all our parents
    for (i = 0; i <= current_depth; i++) ++counts[i];
    # We don´t know which are regular files and which are directories.
    # Non-directories will have a count of 1, and directories with a
    # count of 1 are boring, so print only counts above 1.
    if (counts[current_depth] > 1) printf "%d\t%s\n", counts[current_depth], $0;
    # Get ready for the next round
    previous_depth = current_depth;
}'

相关内容