du结果与ls -l结果相比偏高偏低的原因分析

我们平常使用右键或者ls -l看到的文件大小都是指这个文件它本身内容的大小。比方说一个文本文件,里面写了ab,那么它二进制内容实际是61610a,也就是ab换行符,那么总共占了3个byte。所以右键以及ll看到的结果应该是3。而用du结果是4K(因人而异),为什么会不同呢?

这是因为du=disk usage,它指这个文件放到磁盘中占了多少空间,当然3byte<4K,但是block是最小的单位,因此这个文件就占用了一个block,大小也就是4K。有一种计算方法可以帮助理解,但是正确性我没有考证:假如文件是13K,1个block大小是4K,那么du结果是多少呢?13/4=3.25,也就是该文件要占3个多block,因此磁盘占用就应该是4个block,du结果应该是4*4=16K。

从上面我们可以看到,du是计算文件占了多少个block,似乎du结果总应该大于等于文件内容的,也就是du结果总大于等于ll的,但也不尽然。如果你出现了du结果只有几K,但是右键一看文件竟然有好几M甚至上G,也不要惊讶,这是有可能的。

linux中有一种文件叫做sparse file,它可以延迟分配磁盘空间,特别适合虚拟机。比方说你为虚拟机分配了1G的虚拟磁盘空间,也就创建了一个1G的磁盘文件,但是如果你还没有打开虚拟机使用这个文件,它实际上是没有任何内容的,也就是说没有产生磁盘占用。这个时候,ll结果将是1G,而du结果是0。sparse file使用了dd命令的seek参数,具体原理大家可以再查。这种情况被某些人称作文件的黑洞,很形象。

du有一个参数是 --apparent-size,效果与ll相同。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值