ディスクストレージの5%以上を使用するファイルシステムを表示するシェルスクリプト

ディスクストレージの5%以上を使用するファイルシステムを表示するシェルスクリプト

[![ここに画像説明を入力][1]][1]

このスクリプトでは、grepコマンドはどのように機能しますか?ファイルシステムが多すぎて(図を参照)、ファイルシステムベースの警告条件に従って動作するようにスクリプトを実行したいです。] [1]] [1]

これは私のスクリプトです。

ALERT=5 
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 , $1 }' > sample.txt 
while read line; do 
  var1=$(echo $line | awk '{ print $1}' | cut -d '%' -f1 ) 
  echo $var1 
  var2=$(echo $line | awk '{ print $2 }' ) 
  echo $var2 
  if [ "$var1" > $ALERT ]; then 
     echo "Alert: Almost out of disk space" 
  fi 
done < sample.txt

ディスク使用量が5%以上のファイルシステムを表示したいのですが、スクリプトを実行すると、ファイルシステムディスク使用量は4%で表示されます。

Filesystem Size Used Avail Use% Mounted 
on overlay 880G 28G 808G 4% / 
tmpfs 126G 0 126G 0% /dev 
tmpfs 126G 0 126G 0% /sys/fs/cgroup 
/dev/sdb1 880G 28G 808G 4% /etc/hosts 
shm 64M 996K 64M 2% /dev/shm 
/dev/sda3 215G 21G 183G 10% /home/cg/root 
tmpfs 126G 0 126G 0% /proc/scsi 
tmpfs 126G 0 126G 0% /sys/firmware 
4 overlay   
Alert: Almost out of disk space 4 /dev/sdb1 Alert: Almost out of disk space 2 shm 
Alert: Almost out of disk space 10 /dev/sda3 Alert: Almost out of disk space

答え1

  • ローカルファイルシステムのみを測定したいようです。この場合は、以下を-l使用してください。df
  • dfヘッダーをスキップするには、単純なヘッダーでsed 1d十分です。
  • 出力形式化にawkでprintfを使用する
  • awkは文字列から数値への変換自体を処理できます。 5番目の列がパーセント記号付きの数字であるとし、$5+0それを数字に変換します。

これにより、きれいなスクリプトは次のようになります。

df -lh | sed 1d | awk '{ if( $5+0  >5) printf "ALERT FOR %s at %d%%\n",$1, $5}'

関連情報