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

Pea*_*key 32 linux ls du

我很难掌握读取文件大小的正确方法是什么,因为每个命令都会给你不同的结果。我还在http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html 上看到了一篇文章,其中说明了以下内容;

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

ls 会给你文件的实际大小。

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

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

Han*_*an5 49

这称为松弛空间

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

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

  • 该文件的实际大小为 3 KB。
  • 该文件的常驻大小为 64 KB,因为该单元中剩余的 61 KB 无法分配给另一个文件,因此会丢失。

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

  • @PeanutsMonkey,旁观者眼中的准确性。;-) 基本上,如果您担心文件在其他地方占用多少空间(例如通过网络复制、添加到 zip 文件、备份到外部驱动器等),那么实际大小就是你关心。如果您关心文件现在所在的驱动器上剩余的空间量,那么您关心的是驻留大小。由于 `du` 向您显示了 `d`isk `u`sage,它查看当前驱动器上占用的空间,从而显示驻留大小。 (8认同)
  • @Handyman5 - 发布后已经快一年了,但我很好奇使用“df -h”时上面的答案有何不同? (2认同)
  • `df` 报告剩余块的数量 * 文件系统块大小。在这种情况下,它更像是“du”,因为即使部分使用的块也被认为是完全分配的。`df` 基本上翻译了 [statvfs](http://linux.die.net/man/2/statvfs),因此您可以查看该系统调用以更好地了解发生了什么。 (2认同)

wom*_*ble 23

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

有趣的技巧:创建大量大型稀疏文件,然后用您拥有的磁盘空间给您的朋友留下深刻印象(“看,我的硬盘驱动器上存储了 110 亿个 1TB 文件!”)。好吧,那也许就不那么有趣了。


use*_*517 6

文件系统由块组成。文件不必整齐地放入块中。如果文件为 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
Run Code Online (Sandbox Code Playgroud)