あなたが探しているのは、「free」からの出力です:
$ free
total used free shared buffers cached
Mem: 775556 759456 16100 0 22132 592484
-/+ buffers/cache: 144840 630716
Swap: 500344 21972 478372
ツアーはこちら:
これは、768MB の物理 RAM と 500344KB のスワップ パーティションを備えたボックスです。
759456KB は「使用済み」です (2 列目、1 行目)。この「使用済み」メモリのうち、23132KB はバッファ (5 列目、最上行) であり、592484KB (6 列目、最上行) はキャッシュであり、144840KB (2 列目、2 行目) の物理メモリがアクティブなプロセスによって使用されています。
バッファとキャッシュで使用されるメモリをプロセスに使用できると考えると、630716KB (3 列目、2 行目) の物理メモリが空きます。
私が言ったように、swap パーティションは 500344KB (1 列目、一番下の行) です。スワップ ファイルの 21972KB (2 列目、一番下の行) が使用中で、478372KB (3 列目、一番下の行) が空きのままです。
したがって、% 空きメモリの定義は、バッファとキャッシュをカウントするかどうか、およびスワップをカウントするかどうかによって異なります。
これで、適切と思われるパーセンテージを計算するのに十分なはずです。
top と free の出力は次のとおりです。
$ top -n1 | grep "used," ; free
Mem: 775556k total, 751472k used, 24084k free, 20776k buffers
Swap: 500344k total, 21972k used, 478372k free, 586648k cached
total used free shared buffers cached
Mem: 775556 751344 24212 0 20776 586648
-/+ buffers/cache: 143920 631636
Swap: 500344 21972 478372
top と free がどのように一致しているかがわかります (多少の違いはありますが、これはマルチユーザー マシンであり、top と free のプログラムのメモリ使用量がそこに反映されています)。
vmstate を呼び出すときに「-s」を追加すると、形式が異なるだけでほぼ同じ出力が表示されます。
$ vmstat -s ; free
775556 total memory
759920 used memory
674680 active memory
18440 inactive memory
15636 free memory
21892 buffer memory
594372 swap cache
500344 total swap
21972 used swap
478372 free swap
... output truncated ...
total used free shared buffers cached
Mem: 775556 759920 15636 0 21892 594372
-/+ buffers/cache: 143656 631900
Swap: 500344 21972 478372
vmstat がすべて同じ数値を free として表示していることがわかります。
私はあなたと同じ質問があり、式を考え出します
vmstat -s | awk ' $0 ~ /total memory/ {total=$1 } $0 ~/free memory/ {free=$1} $0 ~/buffer memory/ {buffer=$1} $0 ~/cache/ {cache=$1} END{print (total-free-buffer-cache)/total*100}'
procps-ng 3.3.10 の vmstat バージョンと procps-ng 3.3.9 の vmstat でテストしました