Linux 如何处理单位?它使用十进制还是二进制?
Decimal Prefix
name base 10 exp base 1000 exp digits
kilo 10^3 1000^1 1000
mega 10^6 1000^2 1000000
giga 10^9 1000^3 1000000000
Binary Prefix
name base 2 exp base 1024 exp digits
kibi 2^10 1024^1 1024
mibi 2^20 1024^2 1048576
gibi 2^30 1024^3 1073741824
现在,如果你看一下两个命令du
,fdisk
你就会看到区别:
以下是我的 1TB 外置硬盘的示例:
$ du -sh
956G .
在跑步的时候fdisk
:
$ sudo fdisk -l
Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
- 那么哪些应用程序使用十进制,哪些应用程序使用二进制?
- 如何将一种方法应用于整个系统及其内部的应用程序?
答案1
内核文档没有提到 SI 前缀。在文档中出现前缀的地方,它们没有使用愚蠢的i
( k
, M
, 等,而是ki
, Mi
)(参见man 5 proc
,例如)。因为GNU 工具未获得 SI 前缀支持直到 Linux 发布之后,而且 Linus 看起来不像是会仅仅因为标准组织喜欢不同的前缀而更改内核代码的人,我推测 Linux 在使用这些前缀时,会使用二进制前缀。
这作为内核文档的一部分开发的手册页然而,确实讨论了这一点。参见man 7 units
:
Thus, today, MB = 1000000B and MiB = 1048576B.
In the free software world programs are slowly being changed to con‐
form. When the Linux kernel boots and says
hda: 120064896 sectors (61473 MB) w/2048KiB Cache
the MB are megabytes and the KiB are kibibytes.
维基百科参考本文以及 ESR(又名 Eric S. Raymond,著名内核开发人员)的邮件列表帖子([1],[2],[3],[4]kB
) 表示在文档的一部分中将 更改为等的补丁KiB
已被接受,但部分内容仍在使用较旧的变体。因此,前缀是二进制的(或旨在是二进制的)。