首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >-lh`圆文件大小如何?

-lh`圆文件大小如何?
EN

Stack Overflow用户
提问于 2015-07-17 16:26:32
回答 2查看 1.3K关注 0票数 4

我正在比较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:

代码语言:javascript
复制
$ 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:

代码语言:javascript
复制
$ 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使用什么算法来进行舍入?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-17 16:48:53

默认情况下,GNU ls将以1024个为基础的单位集合。

它不会旋转到最近,因为你认为理所当然。

这是来自gnulib human.h的格式化标志

代码语言:javascript
复制
/* Round to plus infinity (default).  */
human_ceiling = 0,

这与你所看到的一切是一致的:

  • 2052年是2.0039 KiB,大约是2.1。
  • 7223是7.0537 KiB,大约是7.1。
票数 5
EN

Stack Overflow用户

发布于 2015-07-17 16:48:40

默认情况下,ls中的块大小为1024,但例如,如果输出为44.203125k,则将其舍入到45k。

你也可以改变它

代码语言:javascript
复制
ls -lh --block-size=1000

以及源代码:ls源代码

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31480451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档