推荐用 free + awk 计算内存使用率:free | awk '/^mem:/ { printf "内存使用率: %.1f% ", $3/$2*100 }',精准匹配 mem: 行,用原始 kib 值计算更精确;若需排除缓存干扰或兼容性更高,则用 /proc/meminfo 提取 memtotal 和 memavailable 计算。

Linux 中用 awk 格式化输出内存使用率,核心是抓取 free 或 /proc/meminfo 的原始数据,再用 awk 提取、计算、美化。关键不在“能不能”,而在选哪条路径更稳、更准、更易读。
用 free + awk 直接算出百分比(推荐)
这是最常用也最直观的方式。free 默认单位是 KiB,加 -m 可转 MB,但计算时用原始值更精确(避免四舍五入误差):
free | awk '/^Mem:/ { printf "内存使用率: %.1f% ", $3/$2*100 }'- 说明:
/^Mem:/精准匹配以 Mem: 开头的行;$2是 total,$3是 used;%.1f%控制小数位并加 % 符号 - 如果想跳过缓存/可用内存干扰(即只看真实已用),可改用
free -w(显示MemAvailable)或手动计算:used = total - available,但需注意不同内核版本字段位置可能微调
从 /proc/meminfo 提取并计算(更底层、更可靠)
该文件内容稳定,不受 free 命令格式变化影响,适合写进监控脚本:
awk '/MemTotal:/ {total=$2} /MemAvailable:/ {avail=$2} END {printf "内存使用率: %.1f% ", (total-avail)/total*100}' /proc/meminfo- 说明:用两个模式分别捕获 MemTotal 和 MemAvailable(单位均为 KB),在 END 块中完成计算和输出
- 若系统较老不支持 MemAvailable,可用 MemFree 替代,但结果会偏高(未剔除 buffers/cache)
带颜色和条件提示的增强版输出
单纯数字不够醒目,加点颜色和阈值判断能快速定位问题:
free | awk '/^Mem:/ { p = $3/$2*100; color = (p > 90) ? "[31m" : (p > 75) ? "[33m" : "[32m"; printf "内存使用率: %s%.1f%%[0m ", color, p }'- 说明:用三元运算符动态设色——红色(>90%)、黄色(75–90%)、绿色(≤75%);
[0m重置颜色 - 注意:终端需支持 ANSI 转义序列,且脚本中建议用
echo -e或直接 printf,避免 echo 不解析
封装成可复用的一行命令或函数
不想每次敲长命令?可以 alias 或函数化:
- 加到
~/.bashrc:alias memuse='free | awk "/^Mem:/ {printf "内存使用率: %.1f%\n", $3/$2*100}"' - 定义函数(支持 tab 补全和参数扩展):
memuse() { free "$1" | awk '/^Mem:/ {printf "内存使用率: %.1f% ", $3/$2*100}'; },之后可传-h或-g参数给 free
不复杂但容易忽略:free 输出的第二行(Mem:)在某些精简系统或容器里可能被省略,此时应优先 fallback 到 /proc/meminfo 方案。实际使用时,先试 free | head -3 确认字段对齐,再写 awk 表达式更稳妥。











