`df -hl`からディスク使用率を出力する方法


12

df -hlサイズ、使用率、使用可能なスペースを含むすべてのパーティションのリストを出力することを知っています。

たとえば、サイズと使用率をsda2との割合で出力したい場合sda3、Linux(Ubuntu)にそれらをチェックして合計し、表示するように指示するにはどうすればよいですか?


1
以下の回答は、すべてのディスクを解析するのではなく、dfコマンドラインにディスクを配置するために使用するdfコマンドを変更することで簡略化できます。すなわちdf -hl / dev / sda [23]
mdpc

回答:


11

df計算合計に、使用--totalsオプションを選択します。一部の選択ドライブのみの合計が必要な場合は、それらを引数として指定します。

例(およびコンピューターからの出力)

これは、すべてのローカルマウントの合計です。

$ df --total -hl
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
none                  490M  660K  489M   1% /dev
none                  497M  1,5M  495M   1% /dev/shm
none                  497M  260K  496M   1% /var/run
none                  497M     0  497M   0% /var/lock
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  19G   12G  7,3G  62%

少数のドライブに制限します(指定されたパスが正確なマウントポイントではない場合、最も近い包含マウントポイントが使用されることに注意してください[最後の注を参照])。

$ df -hl --total /home /fastdisk
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  17G   12G  5,3G  69%

またはdev名前を使用して:

$ df -hl --total /dev/sda1 /dev/sdb1
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
/dev/sdb1              14G   12G  2,1G  85% /
total                  17G   12G  5,3G  69%

さらなるカスタマイズ

「特別な」マウントを除くすべてのマウントを一覧表示する場合は、-xオプションを使用して、パーティションタイプごとに除外できます。(-Tオプションを使用してタイプを表示します。)

個人的には、インタラクティブな使用のために、次のbashエイリアス(に追加~/.bash_aliases)を使用して、「非物理」マウントを除外します。

alias df='df -h -x devtmpfs -x tmpfs -x debugfs'

注意

マウントポイント内のパスを指定すると、マウントポイントへの正確なパスを指定する異なる形式の結果が得られる場合があります。たとえば、ラップトップではsshfs、(ローカル)ファイルサーバーをマウントするために使用します。

df -h ~/.server-root/ ~/.server-root/disks/A ~/.server-root/disks/B
Filesystem            Size  Used Avail Use% Mounted on
johan@server:/        185G   58G  118G  33% /home/johan/.server-root
johan@server:/        1,9T  637G  1,2T  35% /home/johan/.server-root
johan@server:/        1,8T  1,1T  757G  59% /home/johan/.server-root

サーバーのルート(/)はにマウントされ~/.server-rootます。ただし、サーバー上で、ディスクが上に搭載され/disks/*た、df(ラップトップ上)について、「知っている」はありません。

df適切なパスが指定されていれば、サーバー上のさまざまなマウントのディスク使用量を明らかにリストできます。しかし、それは同じ「ファイルシステム」を示しているため、すべてのパスのための「上マウント」(私は信じている)のみ(これに関連するマウントポイントをされているsshfsテーブルをマウントローカルカーネルに実装します)。


もう1つは、質問に実際には関連していないが、質問に対する以前の回答に関連していることです。

awk以前に投稿されたいくつかの回答のように、スクリプト(または同様の)で数値を加算することは、フラグを使用する場合にはお勧めできません-h。これは、特別な処理が必要だからです。ある行と別の行にsize+=$2;あるフィールドに対してだけ実行して、そこから何か有用なものを取得することはできません…418M12G

の例ではawk、利回りに追加500M10.2Gます

$ echo -e '500M\n10.2G' | awk '{size+=$1;} END{print size;}'
510.2

何の510.2?

ここには明らかに問題があります。したがって、覚えておくべきヒントとして、df (および「人間が読める」数値を使用できる他の)の出力で自動化された)計算を行うとき。フラグを使用せ-h、代わりに計算スクリプトへの入力が正規化されていること(バイト、ブロック、KBなど)を確認し、最後に「表示スケーリング」を実行してください。ほとんどのスクリプト言語やプログラミング言語では、次のようなものを追加するのは難しくありません。

If value < threshold Then
  print (value),"B"
Else If value < 1024*threshold Then
  print (value/1024),"kB"
Else If value < 1024*1024*threshold Then
  print (value/1024/1024),"MB"
(and so on...)

ここで、はバイト単位であり、しきい値は1000程度の値です。この方法の結果は、目的の範囲で有効な数字を使用して、印刷値(プレフィックスを除く)を簡単に調整できることです。選ぶ。-h多くの場合、形式が修正されるスイッチ付きの標準ユーティリティの場合と比較します。

もちろん、この計算は多くの場合、より効率的かつ/またはエレガントにすることができますが、それはそれが書かれている特定の言語の問題です。率直に言って、対話的に表示するためだけに実行されるユーザースクリプトで使用する場合いくつかの情報、効率は実際に懸念ではありません。


4

私はあなたの両方の合計を望んでいたと思うsizeし、use%

 df -hl | grep 'sda2\|sda3' | awk 'BEGIN{print "Size","Use%"} {size+=$2;percent+=$5;} END{print size,percent}' | column -t

同上、上記と同じ。
user32398

@ user32398:違いがあります。
pradeepchhetri

この質問に対する私の答えの最後に、この質問に対して単純なawkアプローチ(ちょうどsize+=$1)を使用しない理由について少し詳しく説明しました。この方法は、実際にはの-hオプションと互換性がありませんdf
ヨハンE

2

次のようなツールを使用しますawk

df -hl | awk '/^\/dev\/sd[ab]/ { sum+=$5 } END { print sum }'

どこ:

  • /^\/dev\/sd[ab]//dev/sdaまたはで始まる行のみをフィルタリングするパターンです/dev/sdb
  • { sum+=$5 } 上記のパターンと一致する場合、5番目のフィールドを追加します

Awk.info wikiで役立つawkリファレンスを見つけることができます


%を合計するだけでは不十分だと思いますが、ありがとうございます。
user32398

1
sudo df -hl | grep 'mountdirname' | awk '{print $5}'

1
彼は尋ねたためsize% usedと、available。使用率だけではありません。また@mdpcドライブを選び出しためのより良い方法がありますが、パターンマッチのawkしたい場合はそれを行うことができます: df -hl | awk '/sda2/{print $2,$5,$4}'
jesse_b

0

アラートを使用したい場合は、IFTTT、Telegram And WebHooksを使用します(すべて無料です)

#!/bin/bash
diskusage=$(df -H | grep -vE '^Filesystem|tmpfs|cdrom|mmcblk0p1' | awk '{ print $5 " " $1 }'| cut -f1 -d '%')
hostname=$(hostname)
tolerance=(85)
date=$(date)

if [[ "$diskusage" -gt "$tolerance" ]]
        then
        echo ""
        echo total disk usage is $diskusage%
        echo ""
        curl -X POST -H "Content-Type: application/json" -d '{"value1":"--Alert--","value2":"Total disk usage is '$diskusage'% ","value3":"Host information: '$hostname' "}' https://maker.ifttt.com/trigger/{alert}/with/key/PutYourKeyHEre
fi
echo ''
echo Disk usage is $diskusage%. The tolerance is $tolerance%. No alert fired $date
echo Disk usage is $diskusage%. The tolerance is $tolerance%. No alert fired $date >> /var/log/IFTTT/checkdiskspace.log
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.