自由命令 - 转换后的不同输出

自由命令 - 转换后的不同输出

我正在 CentOS 6 服务器上监视我的 RAM,当我free -h看到 15G 可用时,这还可以,但当我free -b看到 1641154969 字节,等于 1,641154969G 时。


free -h
             total       used       free     shared    buffers     cached
Mem:           15G       3.0G        12G       1.7M        39M       671M
-/+ buffers/cache:       2.3G        12G 
Swap:         7.7G         0B       7.7G 

free -b
             total       used       free     shared    buffers     cached
Mem:    1641154969 3238035456 1317351424    1781760   41451520  704331776
-/+ buffers/cache: 2492252160 1391929753 
Swap:   8279552000          0 8279552000 

答案1

旧版本的free,例如 CentOS 6 中使用的版本,每个值最多仅显示十位数字。显示的“1641154969”缺少最后一位数字。这是固定的按版本 3.3.10;free现在最多显示十一位数字,这足以显示一位艾比字节的记忆。 (我没有检查过,但 3.3.0 版本中的更改(如果不是更早的话)也可能解决了这个问题。)

160 亿字节和显示的“15G”之间的差异是因为这里的缩放是按 2 的幂进行的; 16411549690 除以 1024×1024×1024 是 15.284,显示为 15。当前版本free添加i到单位以明确他们正在使用二进制前缀

答案2

这个问题混淆了两个不同的类别字节单位,即十进制G千兆字节和二进制双字节:

   Prefixes for multiples of
   bits (bit) or bytes (B)
   Decimal              Binary
   Value        SI      Value       IEC
   1000   10^3  k kilo  1024   2^10 Ki kibi
   1000^2 10^6  M mega  1024^2 2^20 Mi mebi
   1000^3 10^9  G giga  1024^3 2^30 Gi gibi

free -h命令打印吉比字节,而free -b打印字节。进行数学计算,(首先0在字节数后加上 a 来补偿free中指出的错误斯蒂芬·基特的回答):

echo $(( 16411549690 / (10**9) ))  # gigabytes
echo $(( 16411549690 / (2**30) ))  # gibibytes

输出:

16
15

硬盘驱动器供应商过去常常利用这种常见的混乱,有一家供应商甚至在集体诉讼中以败诉告终。看Orin Safier 诉西部数据公司,其中2006年,恼怒的购买者被授予30 美元每个备份软件的价值,而不是实际的金钱为了他们的烦恼。

相关内容