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

Nit*_*mar 4 files ls df du

$ ls -lh file1.tar

-rw-r--r-- 1 wnice wnice 40K Aug  6 20:41 file1.tar

$ du -sh file1.tar

80K     file1.tar
Run Code Online (Sandbox Code Playgroud)

为什么它显示相同文件的不同大小?请帮我理解

Eli*_*ias 6

du命令显示给定文件使用了多少磁盘空间。

相反,该ls命令显示文件的大小。使用的空间可能大于文件大小,具体取决于使用的文件系统。

例如,我们可以像这样创建一个大小为 1 字节的文件(文件中只有一个换行符):

echo > tmp.txt
Run Code Online (Sandbox Code Playgroud)

然后检查它的大小,使用ls -l它显示一个字节的大小:

ls -l tmp.txt 
-rw-r--r-- 1 elias elias 1 aug  6 17:50 tmp.txt
Run Code Online (Sandbox Code Playgroud)

然后使用 du 检查已用空间:

du -h tmp.txt 
4,0K    tmp.txt
Run Code Online (Sandbox Code Playgroud)

因此,在此示例中使用的磁盘空间为 4 KB,尽管文件大小仅为 1 个字节。

  • du 显示块大小,由于文件大小小于 4K 块大小,因此只会显示 4K。如果文件大小为 5K,它现在将显示正在使用的 8K。`sudo blockdev --getbsz /dev/sda1` 应该显示正在使用的驱动器的块大小。 (2认同)