使用ls和du找到文件的大小。有什么区别

时间:2014-07-20 12:18:50

标签: bash shell unix admin

我的服务器中有一个名为 today.log 的文件。

ls -l today.log显示400GB。

du -sh today.log。显示240GB

ls和du ...之间的区别是什么?

1 个答案:

答案 0 :(得分:1)

du显示文件使用了多少磁盘。 ls显示文件的大小。这两个值可以不同。带孔的文件占用的空间小于其大小。大多数文件都没有完全填满文件系统的块,因此它们占用的空间比它们的大小要多。具有单个字节的文件仍然占用至少一个完整块。 (通常为512或1024字节。)作为一个例子,考虑位置为183738475(随机键入的数字)的单个字节的文件。该文件可以使用单个块存储在磁盘上(每当内核向文件系统查询文件中除单个字节以外的字节时,文件系统将它们报告为零,并且不需要存储任何内容。并非所有文件系统都可以工作这样。)但是文件的大小是183738475,因此ls将报告该文件,du将报告文件系统使用了多少块。 du -h将报告块大小转换为人类可读格式时使用的块数。请记住,实际数字会因文件系统而异。例如:

$ echo > foo; ls -l foo |awk '{print $5}'; du foo; du -h foo
1
8   foo
4.0K    foo

此文件大小为一个字节,但在磁盘上占用8个块,块大小为512,因此这8个块消耗4k。 (我的文件系统已针对大型文件进行了优化,而小文件则浪费了大量空间。)