root@SERVER ~$ df
Filesystem 512-blocks Free %Used Iused %Iused Mounted on
/dev/YXCV 655360 365632 45% 6322 13% /
/dev/ASDF 3801088 670648 83% 41759 32% /usr
/dev/ASR 1048576 500496 53% 5555 9% /var
df
사용량이 80% 이상인 줄만 표시하도록 명령 출력을 파이프하려면 어떻게 해야 합니까 ?
예: 다음만 표시됩니다.
/dev/ASDF 3801088 670648 83% 41759 32% /usr
답변1
공백이 포함된 장치 이름이 없다고 가정합니다(출력을 구문 분석할 때 어려움을 겪음 df
).
df -P | awk '0+$5 >= 80 {print}'
df
POSIX 형식 대신 구현된 출력 형식을 사용하려면 필드 번호를 조정하세요.
그렇지 않은 경우 0+
비교는 어휘적( 9%
보다 큼 80
)입니다. +
이진 산술 연산자를 사용하여 강제로 $5
숫자로 변환하고(그래서 가 9%
됨 9
) 비교 결과를 숫자로 변환합니다. 사용+
1위안) 와 같은 연산자는 awk '+$5 >= 80'
일부 awk
구현에서는 작동하지만 연산자가 무시되는 레거시 구현(A, W 및 K로 작성된 구현)에서는 작동하지 않습니다.
답변2
매우 우아하지는 않지만 효과적입니다. ext4를 자신의 fs로 바꾸십시오(grep 및 많은 경우). 또한 10을 자신의 임계값으로 바꾸십시오.
for fs in `cat /proc/mounts | grep ext4 | awk ' { print $2 }' | tr '\n' ' '` ; do SPC=$( df $fs | awk 'END{ print $(NF-1) }' | sed 's/[^0-9]*//g' ) ; if [ $SPC -gt 10 ]; then echo "$fs used more than 10"; fi done
답변3
죄송합니다. 누군가의 기여를 훔치려는 의도는 아니었지만 아직 댓글을 달 수는 없습니다.
나는 df
명령이 실제로 90-99 사이의 모든 것을 놓친 것을 발견했습니다. 이 변경으로 문제가 해결되었습니다.
df -P | egrep "([80][0-9]|[90][0-9]|100)%"
답변4
df | egrep "([89][0-9]|100)%"
작동합니다.