スワップやキャッシュなど、システムで使用可能な合計メモリ量を知らせる1行を作成したいと思います。
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を使用できますRS=""
。
free | awk -v RS="" '{print $10 "+" $17 "+" $21}' | bc
列レイアウトがfree
私と異なる場合は、フィールド番号を調整する必要があります。
説明: このRS
フィールドはレコード区切り記号です。""
自由出力のすべてのラインを接続して、1つのラインにあるかの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