我很难理解读取文件大小的正确方法,因为每个命令都会给出不同的结果。我还看到了一篇帖子http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html其中规定如下;
du 返回文件在文件系统上的大小。(IE 将始终返回可被 1024 整除的结果)。
ls 将为您提供文件的实际大小。
您所看到的是文件的实际大小与其占用的磁盘空间量之间的差异。(也称为文件系统效率)。
文件系统上的大小和文件的实际大小有什么区别
答案1
这就是所谓的空闲空间:
当数据文件小于文件系统能够跟踪的最小数据单元时,单个位和字节之上的每一层抽象都会导致空间浪费。扇区、簇或块内的这种浪费空间通常称为空闲空间,通常不能用于存储其他数据。对于单个 256 字节扇区,最大浪费空间为 255 字节。对于 64 KB 簇,最大浪费空间为 65,535 字节。
因此,如果您的文件系统以 64 KB 为单位分配空间,并且您存储一个 3 KB 的文件,那么:
- 文件实际尺寸为3 KB。
- 文件居民规模为 64 KB,因为该单元中剩余的 61 KB 无法分配给其他文件,因此丢失。
笔记:一些文件系统支持块子分配,通过将多个小文件(或大文件的尾部)分配到同一个块中,有助于缓解此问题。
答案2
这里还有另一种选择,尚未涉及——稀疏文件。在这种情况下,du
将显示比简单文件更小的尺寸ls -l
,因为ls
报告的文件“尺寸”是明显的大小(如果您想要很多零,则可以读取的字节数),同时du
将继续使用实际正在使用的磁盘块数。
有趣的技巧:创建大量大型稀疏文件,然后向朋友展示你拥有的磁盘空间有多大(“看,我在硬盘上存储了十亿个 1TB 文件!”)。好吧,也许就没那么有趣了。
答案3
文件系统由块组成。文件不必整齐地放入块中。如果文件为 1024 字节,则其在 ls 和 du 中的大小为 1024。如果文件大小为 1025,则其在 ls 中的大小为 1025,在 du 中的大小为 2048。
请注意,上述示例假设块大小为 1024。如今,更大的块大小已成为常态,例如,
ls -l fred
-rw-r--r-- 1 iain users 1024 Jul 13 22:06 fred
du -h fred
8.0K fred
答案4
它们可能不同还有一个原因。du -h 知道何时看到另一个名称下的同一个文件(硬链接,而不是符号链接),并将报告每个文件的大小,但只将大小添加到公共父目录一次。