du -sh /tmp 的输出远大于 /tmp 中每个文件和目录的 du 的总和。为什么?

du -sh /tmp 的输出远大于 /tmp 中每个文件和目录的 du 的总和。为什么?

这个系统是linux mint 18.3,基本上是ubuntu。

sudo du --apparent-size -sb /tmp产量476MB目前在我的系统上。

如果我运行sudo du --apparent-size -sb /tmp/* /tmp/.??*并将其全部加起来,我会得到4MB

(我知道 -b 包括 --apparent-size,只是想明确说明这个问题)

实际上,为了找到总和,因为我很懒,所以我跑了:

sudo du --apparent-size -sb /tmp/* /tmp/.??* | cut -f 1 | paste -sd+ - | bc

为什么有区别? /tmp 中是否有 du 未找到的隐藏文件,或者我的命令是否有错误?

编辑:尽管我很难.??*捕获 .dirs 和 .files,但在这种情况下没有 .a、.b、.c 等文件。

答案1

重现这种情况的一种方法是创建大量空文件(最好是长文件名长度),这将扩展.存储文件名的目录 ( ) 的大小,但不会扩展文件的大小(并且与存储文件的*目录不匹配)这些文件名被存储):

% mkdir emptydir && cd emptydir
% du --apparent-size -sb .
6       .
% du --apparent-size -sb * | cut -f 1 | paste -sd+ - | bc
zsh: no matches found: *
% jot 100000 | while read n; do touch $n; done
% du --apparent-size -sb .
2359296 .
% du --apparent-size -sb * | cut -f 1 | paste -sd+ - | bc
0

因此,我们在这里将空目录从 6 改为 2359296,而 glob 版本的总数仍然为零,因为创建的文件都是空的。

相关内容