Linux에서 파일 시스템 활용도를 확인하고 특정 한도를 초과하는 경우 조치를 취하는 방법은 무엇입니까?

Linux에서 파일 시스템 활용도를 확인하고 특정 한도를 초과하는 경우 조치를 취하는 방법은 무엇입니까?

파일 시스템 활용도 시스템, 즉 모든 드라이브의 여유 공간과 사용 공간을 계산하는 방법입니다. 드라이브가 임계값 제한을 초과하는 경우 공간 사용량을 기준으로 처음 10개의 파일 또는 디렉터리를 인쇄해야 합니다. 한도는 사용된 메모리 %와 같을 수 있습니다.

Linux/AIX용 bash 스크립트 작성을 도와주세요.

답변1

조사하다IBM 지식 센터필요한 명령의 차이는 해결된 것 같습니다.통보받았다, AIX에서는 테스트할 수 없어서 위 사이트에서 AIX 차이점에 대해 배운 내용을 바탕으로 작성했습니다. 표준 GNU/Linux 도구의 특정 옵션을 무시하기 전에 잘 테스트됩니다. YMMV.

먼저 파일 시스템 목록, 각 파일 시스템에서 사용되는 비율, 파일 시스템 크기(닫을 수 없음) 및 나중에 처리해야 할 마운트 지점을 얻을 수 있습니다. 사용하면 df -F %z %m다음과 같은 결과가 반환됩니다. 이는 /dev/sda1 1545476 78% /home장치에 설치된 1545476개 블록 중 78%가 사용 중임을 의미합니다./dev/sda1/home

추가 조사를 위해 파일 시스템과 마운트 지점과 사용된 백분율("%" 기호 제외)만 알면 되므로 sed출력을 사용하고 수정합니다 awk. 이 작업을 수행할 때 uasge를 먼저 입력하고 이름을 두 번째로 지정하고 실제 파일 시스템을 나타내지 않는 줄을 제거하고 각 파일 시스템에 대한 마운트 지점을 얻을 수도 있습니다. 이렇게 하면 향후 처리가 더 쉬워집니다. 마지막으로 가장 중요한 항목이 먼저 나오도록 사용률을 기준으로 내림차순으로 정렬할 수 있습니다. 이는 우리에게 다음 명령을 제공합니다.

df -F %z %m | grep -e '^/dev/[sh]d' | sed 's/%//g' | awk '{print $3" "$1" \""$4"\""}' | sort -rn

한 줄의 최종 출력은 다음과 같습니다 78 /dev/sda1 /home.

이제 이를 각 라인을 읽고 사전 설정(여기서는 75로 설정)에 따라 필요에 따라 처리하는 루프에 대한 입력으로 사용할 수 있습니다. action_limit실행 권한이 있는 쉘 스크립트로 저장하십시오.

#!/bin/bash
action_limit=75;
df -F %z %m \
    | grep -e '^/dev/[sh]d' \
    | sed 's/%//g' \
    | awk '{print $3" "$1" "$4}' \
    | sort -r -n \
    | while read -r pct dsk mnt; do
        if test $action_limit -le $pct; then
            echo "$mnt for $dsk is using ${pct}%";
        fi;
    done

echo이제 적합한 파일 시스템을 알았으므로 해당 파일 시스템에서 수행하려는 작업에 대한 명령으로 줄을 바꿔야 합니다. 이 echo명령은 다른 명령을 호출해야 하는 위치를 보여주고 스크립트에 전달할 수 있는 정보를 표시합니다. 모든 것을 사용할 필요는 없습니다. 아마도 $mnt장착 지점만 필요할 것입니다. 공백이나 기타 위험한 쉘 문자를 포함할 수 있는 디렉토리 경로는 다른 스크립트나 명령 에 $mnt대한 인수로 사용될 때 따옴표로 묶어야 합니다.

크기별로 적합한 파일 시스템의 최상위 파일/디렉토리만 나열하기 위해 호출할 완전히 새로운 스크립트를 만들 필요는 없습니다. 위의 명령을 추가하여 수정된 쉘 스크립트를 제공할 수 있습니다.

#!/bin/bash
action_limit=75;
top_count=10;
df -F %z %m \
    | grep -e '^/dev/[sh]d' \
    | sed 's/%//g' \
    | awk '{print $3" "$1" "$4}' \
    | sort -r -n \
    | while read -r pct dsk mnt; do
        if test $action_limit -le $pct; then
            echo "$mnt for $dsk is using $pct%";
            du -s -x -m "$mnt"/* | sort -rn | head -$top_count| awk '{SZ=$1;$1="";print "\t"SZ"\t"$0}';
        fi;
    done

출력은 설정된 제한을 충족하거나 초과하는 파일 시스템을 기준으로 내림차순으로 정렬되고, action_limit그 다음에는 해당 파일 시스템에서 가장 많은 공간을 사용하는 파일 또는 디렉터리가 정렬됩니다. 나열된 파일 또는 디렉토리의 수는 새 변수에 의해 설정됩니다 top_count. 깔끔하고 읽기 쉽게 유지하기 위해 마운트 지점 아래에 들여쓰기되어 있으며 각 파일이나 디렉터리의 전체 크기(MB)가 포함되어 있습니다. ( 제어하고 킬로바이트 또는 기가바이트로 -m변경할 수 있습니다 . 메가바이트는 좋은 절충안인 것 같습니다.)-k-g

마지막으로 태그를 사용하므로 /bash모든 테스트가 내부에서 완료되고 bashbash 특정 테스트나 구문이 사용된 경우 이를 포착하지 못했습니다. 따라서 다른 셸이 있는 경우 신뢰하기 전에 신중하게 테스트하세요.

관련 정보