“du -ks *”的答案有可能是完全错误的吗?

“du -ks *”的答案有可能是完全错误的吗?

在 Ubuntu 18.04 上,我正在调查磁盘空间报告的差异。通过执行 adu -ks *查看子目录上​​的空间,我缩小了差异范围,但是当再次执行相同的命令时,其中一个目录返回的大小是之前给出的数字的两倍。这很小(30M 而不是 15M),但它可能会影响我对 du 答案的信任。

所有这一切都在没有警告或错误的情况下发生。难不成du把数据搞错了,什么也没说?

干杯,休伯特

答案1

您很可能会看到硬链接的效果。

du实用程序只会计算并显示每个索引节点所占用的大小一次,即使该索引节点在一个或多个目录中具有多个关联名称。

例子:

$ tree
.
|-- dir-a
|   `-- file1
`-- dir-b
    `-- file1

2 directories, 2 files
$ ls -li dir-*/file1
25732 -rw-r--r--  2 myself  wheel  8757248 Dec  9 08:33 dir-a/file1
25732 -rw-r--r--  2 myself  wheel  8757248 Dec  9 08:33 dir-b/file1

文件dir-a/file1dir-b/file1是同一文件的两个名称。请注意ls -li(第一列)输出中的索引节点号。

$ du -h dir-*
8.4M    dir-a
1.0K    dir-b
$ du -h dir-b
8.4M    dir-b

使用第一个命令时,目录的大小dir-b仅为 1 KB,但运行第二个命令时显示目录大小为 8.4 MB。这是因为在第一个命令中, file1in 中的文件已经被看到,因此它不包含在再次看到相同 inode 时dir-a的大小计算中。dir-b

相关内容