[![여기에 이미지 설명 입력][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}'