我很难掌握读取文件大小的正确方法,因为每个命令都会给出不同的结果。我还在http://forums.devshed.com/linux-help-33/du-and-ls-generating-inconsistent-file-sizes-42169.html上看到一个帖子,上面写着:
du给出文件的大小,因为它驻留在文件系统上。(将永远给你一个可被1024除的结果)。ls会给出文件的实际大小。您要查看的是文件的实际大小与它占用的磁盘空间大小之间的差异。(也称为文件系统效率)。
它驻留在文件系统上和实际大小有什么区别?
发布于 2011-07-13 20:41:07
这称为松弛空间:
当数据文件小于文件系统能够跟踪的最小数据单元时,单个位和字节之上的每个抽象层都会导致空间浪费。扇区、集群或块中的这种浪费空间通常称为空闲空间,通常不能用于存储其他数据。对于单个256字节扇区,最大浪费空间为255字节.对于64 64集群,最大浪费空间为65,535字节。
因此,如果您的文件系统以64 KB为单位分配空间,并且存储一个3 KB文件,那么:
注意:一些文件系统支持块子分配,这有助于通过将多个小文件(或大型文件的尾部)分配到同一个块来缓解这个问题。
发布于 2011-07-13 23:22:15
这里还有另一种选择,它还没有被覆盖--稀疏文件。在这种情况下,du显示的大小比简单的ls -l要小,因为ls将文件的“大小”报告为明显的大小(如果需要大量的零,您可以读取的字节数),而du将继续使用实际使用的磁盘块数。
有趣的技巧:创建大量的大型稀疏文件,然后用你有多少磁盘空间给你的朋友留下深刻印象(“看,我在我的硬盘上存储了7万个1TB文件!”)好吧,那就没那么有趣了。
发布于 2011-07-13 20:40:34
文件系统由块组成。文件不必整齐地放入块中。如果一个文件是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 fredhttps://serverfault.com/questions/290088
复制相似问题