物理メモリ使用量を計算するには、/proc/meminfo 1行を使用します(memtotal - memfree - キャッシュ済み - バッファリング済み)。

物理メモリ使用量を計算するには、/proc/meminfo 1行を使用します(memtotal - memfree - キャッシュ済み - バッファリング済み)。

bashで私のMOTDとフロントOLEDディスプレイの実際のメモリ使用量を計算しようとしています。

残念ながら、数値をkBからMBに正しく変換しませんでした。しかし、公式は次のとおりです/proc/meminfo

MemTotal - MemFree - キャッシュ - バッファ

を使用して抽出できますgrep -e。しかし、私は次の点を主張します。

  • どのように値だけをgrepできますか/proc/meminfo
  • この数字をkBをMB(/ 1024)に変換するにはどうすればよいですか?

だから私の使命は、上記の値を減算してその値を単一の値として印刷することです(加算MBはボーナスです)。

答え1

GNUを使用すると、sed次のことができます。

sed -zE 's_.*MemTotal: *([0-9]*).*\nMemFree: *([0-9]*).*\nBuffers: *([0-9]*).*\nCached: *([0-9]*).*_echo $(((\1-\2-\3-\4)/1024)) MB_e' /proc/meminfo

この-zオプションは、単一バッファのファイル全体を読み取り、単一の正規proc/meminfo表現から4つの値をすべて抽出し、そこからコマンドeの危険フラグを使用してコマンドを実行する計算を構成しますs

フラグ付きまたはなしのPOSIXバージョンの場合は、sedコマンド置換を使用して計算から抽出を埋めることができます(同じことは危険です)。-zesed

echo $(( ($(sed -E '/^(MemTotal|MemFree|Cached|Buffers): *([0-9]*).*/{s//\2/;H;};$!d;x;s/[[:cntrl:]]//;s//-/g' /proc/meminfo)) / 1024)) MB

行が長いということはわかりますが、両方とも一行だと思います。

修正する:他の丸め

説明では、減算する前に各値をMBに変換するように要求します。変更されたスクリプトは次のとおりです。

echo $(( $(sed -E '/^(MemTotal|MemFree|Cached|Buffers): *([0-9]*).*/{s//\2/;H;};$!d;x;s/[[:cntrl:]]//;s__/1024-_g;s_$_/1024_' /proc/meminfo))) MB

これにより、追加の丸めエラーが発生します。例えば

MemTotal:       16359572 kB
MemFree:         6614000 kB
Buffers:          602108 kB
Cached:          3685372 kB

5330MBの代わりに5333MBを出力します(実際の値:5330.16MB)。

関連情報