디스크 스토리지의 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+0이를 숫자로 변환하세요.

이를 통해 깨끗한 스크립트는 다음과 같습니다.

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

관련 정보