`du -b` 显示的大小与 `ls` 不同

`du -b` 显示的大小与 `ls` 不同

我有一个包含数百个文件的目录(真实文件,没有符号链接,没有子目录)。

当我ls -la在 Excel 中使用并总结大小时,我得到287190字节(?)。

当我使用du -bdu --apparent-size --block-size=1获取422358字节时(?)。

我以为这两个意思是一样的,为什么有区别呢?

答案1

du给出磁盘使用情况,它与所有文件大小的总和不同。

例如, adu -b file将给出与创建目录“dir”不同的输出,将相同的文件放入“dir”中并执行du -b dir.在我的系统上,目录的“开销”有 30 个额外字节。根据目录的内容,我想象目录大小会改变(但如果它是完全线性的,我会感到惊讶)。

另外,差异的相对大小意味着您可能错过了一个包含相当多文件的隐藏目录,或者您可能错过了很多隐藏文件(即使您确实使用了 -a 标志)。

此外,如果一种工具遵循符号链接而另一种工具不遵循,则可能存在符号链接,从而导致差异。

最后,对于某些文件系统,如果文件的内容足够小,它们可能会内联到文件系统 INode 中,并且对于许多文件系统,会保留一个块来保存文件的内容,即使该块未完全使用。当尝试比较两者时,这些变化会增加额外的噪音。

答案2

硬盘驱动器分为外壳。每个文件占用一个或多个簇。

想象一下具有 16 字节簇的硬盘驱动器。

12字节的文件将占用1个簇,其中一些字节在簇中未使用。使用 ls,文件大小将为 12,使用 du,文件大小将为 16。

32字节的文件正好占据2个簇。使用 ls,文件大小将为 32,使用 du,文件大小将为 32。

对所有文件执行此操作,总结一下,您将获得您写入的值。

更多信息:https://en.wikipedia.org/wiki/Data_cluster

相关内容