du -h 和 ls -lh 有什么区别?

du -h 和 ls -lh 有什么区别?

我很难理解读取文件大小的正确方法,因为每个命令都会给出不同的结果。我还看到了一篇帖子http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html其中规定如下;

du 返回文件在文件系统上的大小。(IE 将始终返回可被 1024 整除的结果)。

ls 将为您提供文件的实际大小。

您所看到的是文件的实际大小与其占用的磁盘空间量之间的差异。(也称为文件系统效率)。

文件系统上的大小和文件的实际大小有什么区别

答案1

这就是所谓的空闲空间

当数据文件小于文件系统能够跟踪的最小数据单元时,单个位和字节之上的每一层抽象都会导致空间浪费。扇区、簇或块内的这种浪费空间通常称为空闲空间,通常不能用于存储其他数据。对于单个 256 字节扇区,最大浪费空间为 255 字节。对于 64 KB 簇,最大浪费空间为 65,535 字节。

因此,如果您的文件系统以 64 KB 为单位分配空间,并且您存储一个 3 KB 的文件,那么:

  • 文件实际尺寸为3 KB。
  • 文件居民规模为 64 KB,因为该单元中剩余的 61 KB 无法分配给其他文件,因此丢失。

笔记:一些文件系统支持块子分配,通过将多个小文件(或大文件的尾部)分配到同一个块中,有助于缓解此问题。

答案2

这里还有另一种选择,尚未涉及——稀疏文件。在这种情况下,du将显示比简单文件更小的尺寸ls -l,因为ls报告的文件“尺寸”是明显的大小(如果您想要很多零,则可以读取的字节数),同时du将继续使用实际正在使用的磁盘块数。

有趣的技巧:创建大量大型稀疏文件,然后向朋友展示你拥有的磁盘空间有多大(“看,我在硬盘上存储了十亿个 1TB 文件!”)。好吧,也许就没那么有趣了。

答案3

文件系统由块组成。文件不必整齐地放入块中。如果文件为 1024 字节,则其在 ls 和 du 中的大小为 1024。如果文件大小为 1025,则其在 ls 中的大小为 1025,在 du 中的大小为 2048。

请注意,上述示例假设块大小为 1024。如今,更大的块大小已成为常态,例如,

ls -l fred
-rw-r--r-- 1 iain users 1024 Jul 13 22:06 fred

du -h fred
8.0K    fred

答案4

它们可能不同还有一个原因。du -h 知道何时看到另一个名称下的同一个文件(硬链接,而不是符号链接),并将报告每个文件的大小,但只将大小添加到公共父目录一次。

相关内容