Bash 스크립트에서 디스크 통계를 얻는 가장 쉬운 방법은 무엇입니까?
이미 사용하고 있어요
cat /sys/block/*/stat
전체 대역폭은 디스크/파티션별로 계산되지만, 디스크의 전체 크기와 사용/사용 가능한 섹터 수도 확인하려고 했습니다.
이 통계를 사용할 수 있다는 것을 알고 있지만 df
대안을 찾고 있습니다(방법df백엔드가 작동하나요? ), /sys/class/
또는 를 사용하는 것이 좋습니다 /sys/block/
.
가능합니까? 아니면 df | awk
내가 찾고 있는 통계를 얻으려면 top을 사용해야 합니까 ?
편집하다
예:
이는 시스템에서 다양한 정보를 수집하여 그래픽 시스템에 보고하는 메트릭 보고 스크립트에 사용됩니다.
즉, 섹터 읽기/쓰기 통계를 캡처합니다.
for device in /sys/block/*
do
stats=$( cat $device/stat )
sectorsRead=$( echo $stats | awk '{print $3}' )
sectorsWrite=$( echo $stats | awk '{print $7}' )
doSomethingWith sectorsRead
doSomethingWith sectorsWrite
done
비슷한 작업을 하고 싶지만 총 섹터 수와 사용/무료 섹터 수를 구하고 싶습니다.
답변1
당신이 원하는 작업을 위한 가장 이식성이 뛰어난 도구입니다 df
. 함부로 사용하지 마십시오. /sys
Linux가 아닌 시스템에서는 작동이 보장되지 않습니다. 그리고 바퀴를 재발명하지 마세요. 그게 바로 그 목적 df
이고 그 이유는지정됨POSIX를 통해.
물론 상황이 그렇게 간단하지는 않습니다. 여러 가지 df
구현이 있으며 그 중 일부는 다른 형식을 사용합니다. 그러나 무한한 지혜로 POSIX 사양을 작성한 훌륭한 사람들은 사양에 다음 옵션을 포함했습니다 df
.
-P
Produce output in the format described in the STDOUT section.
따라서 항상 사용한다면 df -P
가능한 한 휴대성이 좋아야 합니다. 이 플래그를 사용하면 모든 POSIX 호환 df
버전(모든 버전이거나 가능한 한 유사해야 하며 차이 없음)은 다음 사양에 따라 출력을 생성합니다(에서 가져옴).POSIX df
페이지):
-k 및 -P 옵션이 모두 지정된 경우 다음 헤더 행을 작성해야 합니다(POSIX 로케일로).
"파일 시스템 블록 1024가 사용 가능한 용량을 사용하여 설치되었습니다\n"
-k 옵션 없이 -P 옵션을 지정한 경우 다음 헤더 행을 작성해야 합니다(POSIX 로케일).
"사용 가능한 용량을 사용하여 파일 시스템 512 블록이 설치되었습니다.\n"
구현에서는 정보가 정렬된 열에 표시되도록 머리글 행과 개별 데이터 행 사이의 간격을 조정할 수 있습니다.
-P의 나머지 출력에는 지정된 각 파일 시스템에 대한 한 줄의 정보가 포함되어야 합니다. 이 줄의 형식은 다음과 같아야 합니다.
"%s %d %d %d %d%% %s\n", , , , , ,
다음 목록에서 512바이트 단위(-k가 지정된 경우 1024바이트)로 표현된 모든 수량은 다음으로 높은 단위로 반올림되어야 합니다. 이러한 필드는 다음과 같습니다.
구현 정의 형식의 파일 시스템 이름입니다. 파일 시스템의 총 크기(512바이트)입니다. 이 숫자의 정확한 의미는 구현에 따라 정의되지만 일반적으로 사용자가 사용할 수 없는 시스템에서 예약한 공간인 , , 및 모든 공간을 포함해야 합니다. 파일 시스템의 기존 파일에 할당된 총 공간 크기(512바이트 단위)입니다. 권한이 없는 사용자가 새 파일을 생성하는 데 사용할 수 있는 파일 시스템의 총 공간 크기(512바이트 단위)입니다. 이 숫자가 0보다 작거나 같으면 프로세스에 적절한 권한이 없으면 먼저 다른 파일을 삭제하지 않고는 파일 시스템에 새 파일을 생성할 수 없습니다. 쓰여진 숫자는 0보다 작을 수 있습니다. 파일 시스템의 모든 파일에 현재 할당된 일반 여유 공간의 비율입니다. 이는 분수를 사용하여 계산해야 합니다: /( + )
백분율로 표시됩니다. 0보다 작으면 백분율은 100보다 클 수 있습니다. 백분율 값은 양의 정수로 표현되어야 하며, 소수점 결과는 다음으로 가장 큰 정수로 반올림됩니다.
파일 시스템 계층 구조는 그 아래에 디렉터리를 표시합니다.
-k
결과를 항상 512 대신 1024바이트 단위로 인쇄하려면 이 플래그를 사용해야 할 수도 있습니다 . 또한 LC_ALL=POSIX
로캘이 출력에 영향을 주지 않도록 설정할 수도 있습니다 . 이 모든 것을 종합하면 다음과 같습니다.
뛰어난 휴대성과 결합하여 다음을 awk
수행할 수 있습니다.
totalSectors=$(env -i LC_ALL=POSIX df -k -P /dev/sda1 | awk 'NR>1{print $2}')
usedSectors=$(env -i LC_ALL=POSIX df -k -P /dev/sda1 | awk 'NR>1{print $3}')
availableSectors=$(env -i LC_ALL=POSIX df -k -P /dev/sda1 | awk 'NR>1{print $4}')