【发布时间】:2015-10-07 10:45:08
【问题描述】:
我将ls -lh 显示的四舍五入的文件大小值与以字节为单位的原始大小(例如ls -l 显示)进行比较。我很难弄清楚它使用什么算法来进行字节转换。
我的假设是它将单位 K、M、G 解释为
- (a) 10^3、10^6、10^9 或
- (b) 1024、1024^2、1024^3。
一方面,我有一个文件,ls -l 报告为 2052 字节,ls -lh 舍入为 2.1K:
$ ls -l usercount.c
-rw-r--r-- 1 squirrel lsf 2052 May 13 15:41 usercount.c
$ ls -lh usercount.c
-rw-r--r-- 1 squirrel lsf 2.1K May 13 15:41 usercount.c
这似乎支持假设 (a),因为 2052/1000=2.052 向上舍入为 2.1K,但 2052/1024=2.0039 在四舍五入到小数点后显示为 2.0K。
另一方面,我有另一个文件 ls -l 报告为 7223 字节,ls -lh 显示为 7.1K:
$ ls -l traverse.readdir_r.c
-rw-r--r-- 1 squirrel lsf 7223 Jul 21 2014 traverse.readdir_r.c
$ ls -lh traverse.readdir_r.c
-rw-r--r-- 1 squirrel lsf 7.1K Jul 21 2014 traverse.readdir_r.c
这令人困惑地支持假设 (b),因为 7223/1000=7.223 应向下舍入为 7.2K,但 7223/1024=7.0537 应向上舍入为显示的 7.1K
这使我得出结论,我的假设是错误的,并且它既不是(a)也不是(b)。 ls 使用什么算法来进行这种舍入?
【问题讨论】:
-
有趣的是,1999 和 2099 的文件都显示为 2.0K
-
试试看源码