df -hl
は、すべてのパーティションのリストを、サイズ、使用率(%)、および使用可能なスペースとともに出力することを知っています。
たとえば、サイズと使用量だけをsda2
とsda3
のパーセンテージとして出力したい場合、どうすればLinux(Ubuntu)にチェックして合計し、表示するように指示できますか?
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
_スイッチを使用した標準ユーティリティの場合と比較します。
もちろん、この計算はより効率的かつ/または洗練されていることがよくありますが、それはそれが記述されている特定の言語に対する問題です。率直に言って、ユーザースクリプトで使用されている場合現在のみ実行され、次に、一部の情報をインタラクティブに表示するために、効率はそれほど問題ではありません。
size
とuse%
の合計が必要だと思います
df -hl | grep 'sda2\|sda3' | awk 'BEGIN{print "Size","Use%"} {size+=$2;percent+=$5;} END{print size,percent}' | column -t
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
リファレンスを見つけることができます。
Sudo df -hl | grep 'mountdirname' | awk '{print $5}'
アラートを使用したい場合は、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