我的服务器中有一个名为 today.log 的文件。
ls -l today.log显示400GB。
du -sh today.log。显示240GB
ls和du ...之间的区别是什么?
答案 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。 (我的文件系统已针对大型文件进行了优化,而小文件则浪费了大量空间。)