有谁明白为什么我会得到这些结果?请注意以下两个命令之间的文件大小差异:
$ ls -lh gauss_landmarks_0000.npy
-rw-rw-r-- 1 dparks dparks 1.1G Aug 16 12:43 gauss_landmarks_0000.npy
$ du -h gauss_landmarks_0000.npy
20M gauss_landmarks_0000.npy
这种情况发生在如下所示的机器上:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
我自己的 Linux Mint 笔记本电脑上的结果符合预期:
$ lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description: Linux Mint 18.3 Sylvia
Release: 18.3
Codename: sylvia
答案1
它可能是一个稀疏文件。这意味着并非所有块都被分配,并且文件使用的空间比文件大小建议的要少得多。读取时,丢失的块将读取为零。
您还可以使用-s
选项ls
查看分配的大小,它应该与报告的大小相同du
。
编辑
如果您知道或怀疑某个文件包含许多零字节但不稀疏,则可以使用cp --sparse=always
它使其稀疏,从而可能节省大量磁盘空间。
cp --sparse=always -p file new_file
答案2
在您的情况下,差异确实是由稀疏文件引起的,如其他答案中所述。
当涉及整个目录时,另一个差异来源是硬链接。默认情况下,du
不会对硬链接进行多次计数,这可能会导致du
报告的数量比显示的少得多ll -sh
。
要检查是否涉及硬链接,您可以运行du -l
,以便它也多次计算硬链接,或者您可以运行ll -i <DIR> | sort
.左栏将显示 inode id,如果重复,则文件之间是硬链接。