在我生活在 *nix 世界中的这段时间里,我一直认为当命令接受标志时,-h
我唯一需要改变的就是打印语句的有效格式。我通常不会重新审视这一点,但我确实发现一般情况下确实如此。
今天,当我测量我正在写入的目录的大小时,我有一次非常奇怪的经历。
>>> du -s
15565160 .
>>> du -sh
7.4G .
起初我以为我只是在一个奇怪的地方捕获了目录,但我发现这两个值都非常稳定,随着我不断写入目录,返回的值只略有增加/减少。我的第一个假设是这是一种奇怪的中间状态,但在那种情况下,我本以为结果会有剧烈波动,但du -s
我没有观察到。
这是怎么回事?这个155...
数字是多少?它似乎不是字节数。两者之间的比率似乎相当一致,约为 450。也就是说,如果我将 的结果乘以du -s
450,我得到的值就非常接近 所暗示的字节数du -sh
。
更大的问题是我是否一直都错了。为什么-h
在这种情况下添加标志除了改变打印格式之外还有其他作用?
答案1
首先,你是对的。该-h
标志(当不用于打印帮助文本时)用于告诉各种应用程序转变将输出转换为“人类可读格式”。这很重要……我们稍后会讨论它。du
特别是,该-s
标志给出了其正常“每个目录”输出的摘要。基本上,它将所有内容加在一起。
du
默认返回目录及其内容在存储介质上占用的逻辑块数。占用的块数对于许多磁盘实用程序和脚本很有用...但它不太“人性化”。-h 标志将块数转换回字节数,然后四舍五入到最接近的 1024 倍数(还有一些其他的诡计...我们最终得到千兆字节数和小数点后一位数)。
根据您的描述,我敢打赌您的系统配置为 512 字节块大小,因为:
需要注意的是,du
假定块大小等于(按顺序),标志设置的值, 、或环境变量--block-size=
的值,或。1024 字节是大多数现代文件系统使用的常见默认块大小。但 512 字节块并不罕见。检查这些变量,其中一个可能设置为 512。或者您可能有一个特别旧的 版本。DU_BLOCK_SIZE
BLOCK_SIZE
BLOCKSIZE
1024
du