我很难掌握什么是正确的方法来读取文件的大小,因为每个命令给你不同的结果。 我也在http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html发现了一篇文章,其中声明如下:
du提供文件的大小,因为它驻留在文件系统上。 (IE将永远给你一个可以被1024整除的结果)。
ls会给你文件的实际大小。
你所看到的是文件的实际大小和磁盘空间的差异。 (也称为文件系统效率)。
因为它驻留在文件系统和fil的实际大小之间有什么区别
这被称为松弛空间 :
当数据文件小于文件系统能够跟踪的最小数据单元时,在单个位和字节之上的每个抽象层都会导致浪费的空间。 浪费的扇区,簇或块内的空间通常被称为松散空间,并且通常不能用于存储额外的数据。 对于单个256字节的扇区,最大浪费空间是255个字节。 对于64千字节的集群,最大浪费空间为65535字节。
因此,如果您的文件系统以64 KB为单位分配空间,并且存储3 KB文件,则:
注意 :某些文件系统支持块子分配,这可以通过将多个小文件(或大文件的尾部)分配到同一个块中来缓解此问题。
这里还有另外一个选项,那就是没有被覆盖 – 稀疏的文件 。 在这种情况下, du
将显示比简单的ls -l
更小的尺寸,因为ls
报告文件的“大小”是表观大小(可以读取的字节数,如果您想要大量的零),而du
将继续使用正在使用的实际数量的磁盘块。
有趣的把戏:创build一个很大的稀疏文件,然后给你的朋友留下多less磁盘空间(“看,我在硬盘上存储了十亿兆字节的1TB文件!”)。 好吧,也许不那么好玩。
文件系统由块组成。 文件不必整齐地放入块中。 如果一个文件是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
还有一个原因可能会有所不同。 du -h知道何时以另一个名称(硬链接,而不是符号链接)看到相同的文件,并且会报告每个文件的大小,但是只将大小添加到公共父目录。