`ls -lh`如何舍入文件大小?

时间:2015-07-17 16:26:32

标签: linux unix ls

我正在将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 ssanjabi lsf 2052 May 13 15:41 usercount.c
$ ls -lh usercount.c 
-rw-r--r-- 1 ssanjabi 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 ssanjabi lsf 7223 Jul 21  2014 traverse.readdir_r.c
$ ls -lh traverse.readdir_r.c
-rw-r--r-- 1 ssanjabi 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使用什么算法进行舍入?

2 个答案:

答案 0 :(得分:2)

GNU ls将默认 1024 为基础的单位

它没有舍入到最近,因为你认为是理所当然的。

以下是gnulib human.h的格式标记:

/* Round to plus infinity (default).  */
human_ceiling = 0,

这与您所看到的一切一致:

  • 2052是2.0039 KiB,其最高为2.1
  • 7223是7.0537 KiB,最高可达7.1

答案 1 :(得分:1)

默认情况下,ls中的块大小为1024,但是例如如果输出为44.203125k,则将其舍入为45k
你也可以改变它

ls -lh --block-size=1000

和源代码:ls source code

相关问题