为什么 ls 在更改块大小时显示文件大小不同?

Mik*_*sta 1 ls files

我想检查我的文件系统备份大小

ls -lia backup.tgz 
17 -rw-r--r-- 1 root root 84972633333 ??? 28 10:05 backup.tgz
Run Code Online (Sandbox Code Playgroud)

块大小为 M

 ls -l --block-size=M backup.tgz 
-rw-r--r-- 1 root root 81037M ??? 28 10:05 backup.tgz
Run Code Online (Sandbox Code Playgroud)

最后用块大小 G

ls -l --block-size=G backup.tgz 
-rw-r--r-- 1 root root 80G ??? 28 10:05 backup.tgz
Run Code Online (Sandbox Code Playgroud)

有人能解释一下如此巨大的差异吗?

Ste*_*itt 5

这些值使用 2 的幂而不是 10 的幂显示;所以 1M 是 1,048,576 字节,1G 是 1,073,741,824 字节。

如果相应地进行划分,则这些值与ls输出匹配(向上取整):

$ echo $((84972633333.0/1024/1024))
81036.218007087708

$ echo $((84972633333.0/1024/1024/1024))
79.136931647546589
Run Code Online (Sandbox Code Playgroud)

您可以指定KBMBGB等等,而不是到10使用的权力:

ls -l --block-size=MB backup.tgz
Run Code Online (Sandbox Code Playgroud)

请参见上的块大小的部分coreutils的详细信息的文档。