结果先行
free -h | awk 'NR==2{printf "%.2f%%", $3*100/$2 }'
解释一下
这个命令组合了 free -h 和 awk 命令来输出已用内存的百分比。我们一步一步来解析这个命令:
Step 1
free -h
free 是一个用来显示 Linux 系统内存使用情况的命令。-h 参数是 “human-readable” 的缩写,意味着输出的内存大小会以易读的格式(如 KB、MB、GB)显示。
执行 free -h 后,你会得到类似于下面的输出(实际值会有所不同):
total used free shared buff/cache available
Mem: 314G 215G 13G 4.0G 84G 93G
Swap: 0B 0B 0B
在以上输出结果中,Mem: 行显示了物理内存的使用情况,其中 used 列显示已用内存(215GB),free 列显示空闲内存(13GB)。
Step 2
管道符后的awk命令
awk 'NR==2{printf "%.2f%%", $3*100/$2 }'
awk 是一个文本处理工具,可以用于提取文本或者数据。此前有写过简单的介绍,有兴趣可查阅《Linux命令-awk部分命令及示例》。
在上面的命令中,awk 执行了以下操作:
NR==2:NR 是 awk 的内置变量,表示需要处理的行号。NR==2 表示只处理第二行,即 free -h 命令输出的 Mem: 行。
{printf “%.2f%%”, $3*100/$2 }:对第二行执行的处理方式。
- $3 和 $2 分别代表取第3列和第2列的值,即 used 列和 total 列。$3*100/$2 显而易见是已用内存占总内容存的百分比。
- printf “%.2f%%”, … 则是各种语言都常见的格式化输出,保留两位小数,并在末尾添加 百分号。
所以,整个命令 free -h | awk ‘NR==2{printf “%.2f%%”, $3*100/$2 }’ 的作用是执行 free -h 命令,然后通过管道符 | 将输出传递给 awk 命令,awk 再提取第2行(即内存使用情况)的已用内存和总内存,并计算已用内存的百分比,最后以两位小数的形式输出这个百分比,即为 215×100÷314=68.47。