我将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
使用什么算法来进行舍入?
3条答案
按热度按时间oknrviil1#
GNU ls默认情况下将以 1024 为单位进行 * 舍入 *。
它不会像你认为的那样,四舍五入到最近。
下面是gnulibhuman.h中的格式化标志:
这和你看到的一切都是一致的
inkz8wg92#
默认情况下,ls中的块大小为1024,但例如,如果输出为44.203125k,则会将其舍入为45k
你也可以改变它
源代码:ls source code
falq053o3#
仅列出文件名和整个大小:
这是一个有点简化的版本,列中列出文件: