web-dev-qa-db-ja.com

dfで空きディスク領域を取得して、空き領域をKB単位で表示しますか?

ファイルシステムの空きディスク容量を出力しようとしています/example

コマンドdf -k /exampleを実行すると、使用可能なディスク領域に関する適切な情報をKB単位で取得できますが、それは人間であり、実際にそれを見るだけです。

このデータを取得して、シェルスクリプトの別の場所で使用する必要があります。最初はcutを使用することを考えましたが、その後、ディスクの空き容量が変化し、カットしても正確な結果が得られないため、スクリプトを他のディスクに移植できません。

例の空きディスク容量だけをKBで出力するにはどうすればよいですか?

26
Whoppa

dfの出力を取得してデータをKBで表示するには、_-k_フラグを使用するだけです。

_df -k
_

また、ファイルシステムをdfに指定すると、すべてではなく、その特定の値が取得されます。

_df -k /example
_

質問の本文に関して:特定のファイルシステムの空きディスク容量を抽出したい。これにはいくつかの処理が必要です。

通常の_df -k_出力が与えられた場合:

_$ df -k /tmp
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1        7223800 4270396   2586456  63% /
_

Available(4番目の列)は、たとえばawkまたはcut(以前はtrから_squeeze-repeats_(_-s_)スペースの場合):

_$ df -k /tmp | tail -1 | awk '{print $4}'
2586456
$ df -k /tmp | tail -1 | tr -s ' ' | cut -d' ' -f4
2586456
_

いつものように、結果を変数に保存する場合は、次のようなvar=$(command)構文を使用します。

_$ myUsed=$(df -k /tmp | tail -1 | awk '{print $4}')
$ echo "$myUsed"
2586456
_

また、 Tim Bunceによるコメント から_--direct_を使用して長いファイルシステム名を処理し、代わりに_-_を取得して、エンジンを中断する行を出力しないようにすることができます。

_$ df -k --direct /tmp
Filesystem     1K-blocks    Used Available Use% Mounted on
-                7223800 4270396   2586456  63% /
_
47
fedorqui

Stat(2)コマンドを使用して、空きブロックを表示したり、各ブロックの大きさを調べることができます。

stat -f --printf="%a %s\n" /

指定されたファイルシステム上の空きブロック数(%a)(/)に続いてブロックサイズ(%s)が表示されます。サイズをkBで取得するには、次の例のようにbc(1)コマンドを使用できます。

stat -f --printf="%a * %s / 1024\n" / | bc

最後に、これを変数に入れるには、単にバックティック置換(または最初の答えのように$())を使用するだけです:

SOMEVAR=`stat -f --printf="%a * %s / 1024\n" / | bc`
12
sgros

興味深い列のみを表示

 df /example --total -k -h  --output=source,avail
  • --total =最後の総計
  • -k =ブロックサイズ1K
  • -h =人間が読める
  • --output = [FIELD_LIST]「、」で区切って表示する列リスト

完全に標準ではありません(Ubuntuのマニュアルページで--outputを見ただけです)。この場合、列を削除するためだけにAwkなどが必要ではありません。

これは別の解決策です。

df --output=avail -m /example | tail -1

出力:

6415

1
Alberto Rojas