菜鸟科技网

free命令单位到底是MB还是GB?

这是一个非常常见的疑问,因为 free 命令的输出格式在不同系统和版本中略有不同。

free命令单位到底是MB还是GB?-图1
(图片来源网络,侵删)

在绝大多数现代 Linux 发行版(如 Ubuntu 18.04+, CentOS 7+, Debian 10+ 等)中,free 命令的默认输出单位是 KiB (Kibibytes)

  • KiB (Kibibyte) = 1024 字节
  • 这与 KB (Kilobyte) 在概念上不同,后者在某些语境下指 1000 字节,但在内存管理领域,1024 是标准。

默认输出示例

让我们先看一个典型的 free 命令输出:

$ free
              total        used        free      shared  buff/cache   available
Mem:        16256764     3285356     8642872      123456     4338536    12010308
Swap:        2097148           0     2097148

在这个例子中:

  • total, used, free 等列的数值都是以 KiB 为单位的。
  • 总内存是 16256764 KiB。
  • 你可以手动换算成更易读的单位:
    • MiB (Mebibyte): 16256764 / 1024 ≈ 15872 MiB
    • GiB (Gibibyte): 15872 / 1024 ≈ 15.50 GiB

如何查看和使用不同单位

free 命令提供了强大的 -h (human-readable) 选项,这是最推荐的使用方式,因为它会自动选择最合适的单位(K, M, G, T)来显示,使结果一目了然。

free命令单位到底是MB还是GB?-图2
(图片来源网络,侵删)

使用 -h 选项(推荐)

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          15.9Gi     3.21Gi     8.45Gi       121Mi     4.24Gi     11.7Gi
Swap:          2.0Gi          0B       2.0Gi

解释:

  • -h 选项让 free 自动将数值转换为最合适的可读单位。
  • Gi 代表 Gibibytes (1 GiB = 1024 MiB)。
  • Mi 代表 Mebibytes (1 MiB = 1024 KiB)。
  • B 代表 Bytes
  • available:这是比 free 列更准确的可用内存估算值,因为它包括了可以快速回收的缓存和缓冲区内存,在评估系统剩余内存时,应该关注 available 列而不是 free 列。

其他单位选项

free 命令也支持指定特定的单位后缀:

  • -b: 以 Bytes (字节) 为单位显示。
  • -k: 以 KiB (Kibibytes) 为单位显示 (这是默认行为)。
  • -m: 以 MiB (Mebibytes) 为单位显示。
  • -g: 以 GiB (Gibibytes) 为单位显示。
  • -t: 在末尾显示一个总计行。
  • -s <秒数>: 持续监控,每隔指定秒数刷新一次。

示例:

# 以 MiB 为单位显示
$ free -m
              total        used        free      shared  buff/cache   available
Mem:          15872       3209       8442         120       4222      11725
Swap:          2048          0       2048
# 以 GiB 为单位显示
$ free -g
              total        used        free      shared  buff/cache   available
Mem:             15          3          8           0          4          11
Swap:             2          0          2

不同 free 版本的差异(重要)

在非常旧的 Linux 系统上(CentOS 6 或更早版本),free 命令的默认单位是 KB,而不是 KiB。

free命令单位到底是MB还是GB?-图3
(图片来源网络,侵删)

旧版 free 示例 (单位为 KB):

# 在旧版系统上,默认输出可能是这样
$ free
             total       used       free     shared    buffers     cached
Mem:       16667684    3368124   12258892     126120     208284    2513448
-/+ buffers/cache:     646392   16021292
Swap:       2146304          0    2146304

在这个旧版输出中:

  • total16667684 KB
  • 换算成 GiB: 16667684 / 1024 / 1024 ≈ 15.88 GiB

如何判断你的系统是哪种? 最简单的方法就是运行 free -h,如果你的系统很旧,它可能不支持 -h 选项,此时你可以运行 free -m,如果结果看起来像是用 KiB 除以 1024 得到的,那么它默认就是 KiB,如果结果看起来像是用 KB 除以 1024 得到的,那么它默认就是 KB。


总结与最佳实践

选项 单位 描述
(无选项) KiB 现代 Linux 的默认单位,1 KiB = 1024 B。
-b Bytes 字节,最基础的单位。
-k KiB 与默认行为相同。
-m MiB Mebibytes,1 MiB = 1024 KiB。
-g GiB Gibibytes, 1 GiB = 1024 MiB。
-h 自动 强烈推荐,自动选择 K, M, G, T 等单位,最易读。

建议: 在日常使用和脚本中,始终使用 free -h,它提供了最清晰、最易于理解的内存使用情况,并且能自动适应不同大小的内存配置,如果你需要脚本进行精确计算,请根据你的系统环境选择 -k (现代系统) 或 -m/-b 来确保单位的一致性。

分享:
扫描分享到社交APP
上一篇
下一篇