2011-04-17 52 views
19

为什么du的输出经常和du -b有差别? -b--apparent-size --block-size=1的简写。大多数情况下只使用--apparent-size可以获得相同的结果,但--block-size=1似乎可以解决问题。我想知道输出是否正确,哪些数字是我想要的? (即,实际文件大小,如果复制到另一个存储设备)为什么`du`的输出经常与`du -b`差异很大

+6

为什么downvote?这看起来像一个非常好的问题。请有礼貌地发表评论,如果你想减少问题或答案,以便每个人都可以学到一些东西。匿名downvote是一个潜在的教学时刻扔掉。 – 2011-04-17 16:38:52

+1

@Pete:可能是因为这是关于StackOverflow的主题。我希望有更多的高声誉用户会注意到。 – 2011-04-17 20:41:55

回答

21

外观尺寸是您的应用程序认为是文件中的字节数。如果您决定通过FTP或HTTP发送文件,则会通过网络传输的数据量(不包括协议标题)。这也是cat theFile | wc -c的结果,以及如果使用mmap加载整个文件,文件占用的地址空间量。

磁盘使用情况是由于文件占用该空间而无法用于其他内容的空间量。

在大多数情况下,外观尺寸小于磁盘使用量,因为磁盘使用量计算文件最后(部分)块的全部大小,并且外观尺寸只计数最后一个块中的数据。然而,当你有一个稀疏文件时,表面大小会变得更大(当你寻找文件末尾的某处时会创建稀疏文件,然后在那里写一些东西 - 操作系统并不打算创建大量充满零的块 - - 它只为您决定写入的文件部分创建一个块)。

+0

谢谢!这是一个彻底的解释。那么为什么我需要让'--block-size = 1'具有与'wc -c theFile'相同的输出(保存cat进程)。看起来像'du'只输出正确的字节数,当我指定-h,-k,-m,-B1等时?但也许这是另一个问题? 'du'默认输出块的使用情况,而不是字节的使用情况? – knittl 2011-04-17 16:57:14

+0

@ knittl:我不知道。 – 2011-04-17 19:00:55

+0

很好的解释,但不会谈论问题中存在的'--block-size = 1' - -1。 – 2017-02-17 18:41:20

2

因为默认情况下,du提供的磁盘使用率与文件大小相同或更大。由于根据--apparent大小说

print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be 
larger due to holes in (`sparse') files, internal fragmentation, indirect blocks, and the like 
+0

那么究竟是什么'表观大小'呢?和我完全相反:外观尺寸几乎总是比磁盘使用量高出几个量级 – knittl 2011-04-17 16:34:07

0

比较(例如)du -bmdu -m

-b--apparent-size --block-size=1, 但随后m覆盖块大小是1M

-bh为与-h类似: 的-bh装置--apparent-size --block-size=1 --human-readable,并再次h重写该块大小。

2

文件和文件夹有其真实大小和磁盘大小

  • --apparent尺寸是文件或文件夹的实际尺寸

  • 磁盘上的大小是字节数的文件或文件夹在磁盘上。使用时只需杜

如果遇到明显的大小几乎总是比磁盘使用率较高的几个数量级 同样的事情,那么就意味着你有很多的文件('疏')文件与内部碎片或间接块。