web-dev-qa-db-ja.com

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

df -hlは、すべてのパーティションのリストを、サイズ、使用率(%)、および使用可能なスペースとともに出力することを知っています。

たとえば、サイズと使用量だけをsda2sda3のパーセンテージとして出力したい場合、どうすればLinux(Ubuntu)にチェックして合計し、表示するように指示できますか?

12
user32398

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マウントに関連する)唯一のマウントポイントである(信じる)であるため、すべてのパスに対して同じ「ファイルシステム」と「マウント済み」が表示されます。


別のこと:実際には質問に関連していませんが、以前の回答に関連しています。

以前に投稿されたいくつかの回答のように、awkスクリプト(または類似のスクリプト)を使用して数値を合計することは、_-h_フラグを使用する場合にはない良いアイデアです。特別な取り扱いが必要なためです。ある行で_size+=$2;_で別の行で_418M_であるフィールドに対して_12G_を実行して、そこから何か便利なものを取得することはできません…

awkの例では、_500M_を_10.2G_に追加すると、

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

510.2の何?

ここに明らかに問題があります。したがって、覚えておくべきヒントとしてdf(および 'human readable' numbersを使用できる他の出力)で(自動)計算を行う場合。 _-h_フラグを使用して not し、計算スクリプトへの入力が代わりに正規化されていることを確認してください(たとえば、バイト、ブロック、KBなど) )そして最後に'display scaling'を実行します。ほとんどのスクリプト言語とプログラミング言語では、次のようなものを追加することは難しくありません。

_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_スイッチを使用した標準ユーティリティの場合と比較します。

もちろん、この計算はより効率的かつ/または洗練されていることがよくありますが、それはそれが記述されている特定の言語に対する問題です。率直に言って、ユーザースクリプトで使用されている場合現在のみ実行され、次に、一部の情報をインタラクティブに表示するために、効率はそれほど問題ではありません。

11
Johan E

sizeuse%の合計が必要だと思います

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

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リファレンスを見つけることができます。

2
jasonwryan
Sudo df -hl | grep 'mountdirname' | awk '{print $5}'
1
sandeep

アラートを使用したい場合は、IFTTT、Telegram、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
0
pooley999