내 시스템의 디스크 사용량을 확인하기 위해 간단한 bash 스크립트를 작성 중입니다. while 루프는 파티션의 85% 이상만 인쇄해야 합니다. 90% 이상의 경우 두 개의 파티션이 있지만 첫 번째 파티션만 출력에 인쇄됩니다.
암호:
#!/bin/bash
admin="[email protected]"
threshold="85"
df -h | tail -n +2 | awk '{print $1 " " $5}' | sed 's/.$//' | while read i; do
part=$(echo $i | awk '{print $1}')
util=$(echo $i | awk '{print $2}')
if [ $util -ge $threshold ]; then
echo $part is ${util}% full. An email has been sent to your administrator.
mail -s "Critical: $part is ${util}% full. Clear space immeadiately!" $admin
fi
done
산출:
/dev/mapper/rootvg-root is 92% full. An email has been sent to your administrator.
그러나 /dev/mapper/rootvg-apps도 98% 꽉 찬 것을 볼 수 있습니다.
/dev/mapper/rootvg-apps 20G 20G 445M 98% /apps
/dev/mapper/rootvg-tmp 6.0G 2.4G 3.7G 39% /tmp
/dev/mapper/rootvg-var_log 6.0G 71M 6.0G 2% /var/log
/dev/xvda1 497M 142M 356M 29% /boot
답변1
내 생각에는 출력에 문제가 있는 것 같습니다 df -h
.
사용해 보세요df -Ph
고쳐 쓰다:
매뉴얼 페이지에 따르면 -P
POSIX 출력 형식을 참조합니다.
-P, --portability
use the POSIX output format
파티션 길이가 더 길고 -P
텍스트 처리를 위해 명령( 없이)을 사용하는 경우 예상되는 줄 출력이 두 줄로 분할됩니다.
예상(예):
/dev/mapper/rootvg-tmp/tmp1 86
/dev/mapper/rootvg-tmp/tmp2 90
/tmp 90
실제 출력(예):
/dev/mapper/rootvg-tmp/tmp1
86
/dev/mapper/rootvg-tmp/tmp2
90
/tmp 90
따라서 이 경우 스크립트의 조건은 일치하지 않고 false이므로 처음 두 파티션과 '{print $2}'
일치하지 않습니다 $util -ge $threshold
.
화타이