我的根文件系统的索引节点已用完。如果这是磁盘空间问题,我会用来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;
}'