希望做一个单行来告诉系统上的可用内存总量,包括交换和缓存。
free -t
不是一个选项,所以我必须对空闲列下的值进行求和。
我不确定如何获得这些值;如果我使用awk
,如何在不同行中引用不同的数字(空闲Mem
是$3
,而例如不同行上的空闲交换空间是$4
)?
答案1
在我现在面前的 debian 上,free -t
显示Total:
一行:
total used free shared buffers cached
Mem: 8197980 2583348 5614632 0 222508 1904352
-/+ buffers/cache: 456488 7741492
Swap: 7807584 0 7807584
Total: 16005564 2550180 13455384
如果您只需要该行,您可以使用tail
和awk
来获取值。
但是,如果您free
没有显示这一行,您可以使用 awk withRS=""
来连接行:
free | awk -v RS="" '{print $10 "+" $17 "+" $21}' | bc
如果您的列布局free
与我的不同,您可能需要调整字段编号。
说明:该RS
字段为记录分隔符。将其设置为""
连接 free 输出中的所有行,因此awk
可以像在一行上一样引用它们。
从头开始计数,$1
to$6
是列标题,$7
to 是Mem:
行标题,$8
to$10
是该行上的值...因此$10
是可用内存值。对于以下值,以类似的方式完成此操作;
total used free shared buffers cached
Mem: $8 $9 $10 $11 $12 $13
-/+ buffers/cache: $16 $17
Swap: $19 $20 $21
awk 命令{print $10 "+" $17 "+" $21}
基本上将这些值用+
中间的符号连接起来,然后通过管道传输输出来bc
计算总和。
答案2
也许这可以是一个替代方案free
cat /proc/meminfo | grep -e MemFree -e Buffers -e SwapFree | gawk 'BEGIN{s=0}{s+=$2}END{print s}'
答案3
您是否能够运行free
然后解析输出,例如
free | awk '{print $4}' | tail -3 | sed '2d' |paste -sd+ | bc