我正在比较ls -lh显示的圆角文件大小值和以字节为单位的原始大小(例如,由ls -l显示)。我很难弄清楚它用什么算法从字节进行转换。
我的假设是,它将单位K,M,G解释为
一方面,我有一个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使用什么算法来进行舍入?
发布于 2015-07-17 16:48:53
默认情况下,GNU ls将以1024个为基础的单位集合。
它不会旋转到最近,因为你认为理所当然。
这是来自gnulib human.h的格式化标志
/* Round to plus infinity (default). */
human_ceiling = 0,这与你所看到的一切是一致的:
发布于 2015-07-17 16:48:40
默认情况下,ls中的块大小为1024,但例如,如果输出为44.203125k,则将其舍入到45k。
你也可以改变它
ls -lh --block-size=1000以及源代码:ls源代码
https://stackoverflow.com/questions/31480451
复制相似问题