"df -hl"에서 디스크 사용량 비율을 인쇄하는 방법

"df -hl"에서 디스크 사용량 비율을 인쇄하는 방법

df -hl크기, 사용된 비율, 여유 공간을 포함한 모든 파티션의 목록이 출력된다는 것을 알고 있습니다 .

예를 들어 sum 의 크기와 사용량만 출력하려는 ​​경우 sda2Linux(Ubuntu)에 이를 검사하고 합산하여 표시하도록 어떻게 지시합니까?sda3

답변1

df총합을 계산 하려면 --totals옵션을 사용하세요. 선택한 일부 드라이브의 합계만 계산하려면 해당 드라이브를 매개변수로 지정하세요.

예(및 내 컴퓨터의 출력)

모든 로컬 설치의 합계는 다음과 같습니다.

$ df --total -hl
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
none                  490M  660K  489M   1% /dev
none                  497M  1,5M  495M   1% /dev/shm
none                  497M  260K  496M   1% /var/run
none                  497M     0  497M   0% /var/lock
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  19G   12G  7,3G  62%

몇 개의 드라이브로 제한됩니다. (지정된 경로가 정확한 마운트 지점이 아닌 경우 가장 가까운 마운트 지점이 사용됩니다.[글 끝 부분의 참고 사항 참조]):

$ df -hl --total /home /fastdisk
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  17G   12G  5,3G  69%

또는 dev이름을 사용하십시오:

$ df -hl --total /dev/sda1 /dev/sdb1
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
/dev/sdb1              14G   12G  2,1G  85% /
total                  17G   12G  5,3G  69%

추가 사용자 정의

"특수" 설치를 제외한 모든 설치를 나열하려면 -x파티션 유형별로 제외하는 옵션을 사용할 수 있습니다. ( -T유형을 표시하려면 이 옵션을 사용하십시오.)

개인적으로 대화형 사용을 위해 다음 bash 별칭(에 추가됨 ~/.bash_aliases)을 사용하여 "비물리적" 설치를 제외합니다.

alias df='df -h -x devtmpfs -x tmpfs -x debugfs'

노트

마운트 지점 내에서 경로를 지정하면 마운트 지점에 대한 정확한 경로를 지정하는 것과 다른 결과가 나타나는 경우가 있습니다. 예를 들어, 내 랩톱에 sshfs(로컬) 파일 서버를 설치하는 데 사용합니다 .

df -h ~/.server-root/ ~/.server-root/disks/A ~/.server-root/disks/B
Filesystem            Size  Used Avail Use% Mounted on
johan@server:/        185G   58G  118G  33% /home/johan/.server-root
johan@server:/        1,9T  637G  1,2T  35% /home/johan/.server-root
johan@server:/        1,8T  1,1T  757G  59% /home/johan/.server-root

서버 루트( /)는 에 설치됩니다 ~/.server-root. 그러나 서버에서는 디스크가 마운트되어 /disks/*있고 df랩탑에서는 이를 "알지" 못합니다.

올바른 경로가 주어지면 df서버의 다양한 설치에 대한 디스크 사용량을 나열하는 것이 가능합니다. 그러나 모든 경로에 대해 동일한 "파일 시스템" 및 "마운트 대상"이 표시됩니다.(나는 믿는다)sshfs이는 로컬 커널 마운트 테이블의 유일한 마운트 지점입니다(이 마운트와 관련됨).


또 다른 한가지:질문과 관련이 없지만 관련이 있습니다.이전 답변이 질문에.

awk이전에 게시된 답변 중 일부와 같이 스크립트(또는 유사한)를 사용하여 숫자를 추가하는 것은아니요로고를 사용할 때 좋은 생각입니다 -h. 특별한 처리가 필요하기 때문입니다. 한 행과 다른 행의 필드를 조작하여 size+=$2;유용한 정보를 얻을 수는 없습니다 .418M12G

예를 들어 , 수익률 에 awk추가500M10.2G

$ echo -e '500M\n10.2G' | awk '{size+=$1;} END{print size;}'
510.2

510.2 무엇?

여기에는 분명히 뭔가 문제가 있습니다. 그래서,기억하라는 알림처럼, 출력의 (자동) 계산 중df (그리고 기타 사용할 수 있는 것"사람이 읽을 수 있는"숫자). 꼭 이렇게 해라아니요-h플래그를 사용하면 계산 스크립트에 대한 입력이 정규화되고(예: 바이트, 블록, KB 또는 기타) 다음을 수행합니다.'확대/축소 표시'마지막에. 대부분의 스크립팅 및 프로그래밍 언어에서는 다음과 같은 것을 추가하는 것이 어렵지 않습니다.

If value < threshold Then
  print (value),"B"
Else If value < 1024*threshold Then
  print (value/1024),"kB"
Else If value < 1024*1024*threshold Then
  print (value/1024/1024),"MB"
(and so on...)

어디바이트 단위 및임계점대략 1000 정도의 값입니다. 이 방법의 결론은 원하는 유효 자릿수로 원하는 범위(접두사 제외)의 인쇄된 값을 생성하도록 쉽게 조정할 수 있다는 것입니다. -h일반적으로 형식이 고정되어 있는 스위치가 있는 표준 유틸리티의 경우와 비교해 보십시오 .

물론 이러한 종류의 계산은 더 효율적이거나 우아하게 이루어질 수 있지만 이는 작성되는 특정 언어의 문제입니다. 솔직히 사용해보면사용자 스크립트가끔 실행하여 일부 정보를 대화식으로 확인하면 효율성이 실제로 문제가 되지 않습니다.

답변2

내 생각에 당신은 둘 다의 size합을 원한다고 생각합니다use%

 df -hl | grep 'sda2\|sda3' | awk 'BEGIN{print "Size","Use%"} {size+=$2;percent+=$5;} END{print size,percent}' | column -t

답변3

다음과 같은 도구를 사용할 수 있습니다 awk.

df -hl | awk '/^\/dev\/sd[ab]/ { sum+=$5 } END { print sum }'

어디:

  • /^\/dev\/sd[ab]//dev/sda또는로 시작하는 줄만 필터링하는 패턴입니다./dev/sdb
  • { sum+=$5 }위 패턴과 일치하는 항목에 대해 다섯 번째 필드를 추가합니다.

awk다음에서 유용한 참고 자료를 찾을 수 있습니다 .awk.info 위키.

답변4

알림을 원하시면 IFTTT, Telegram, WebHooks(모두 무료)를 사용해 드릴 수 있습니다

#!/bin/bash
diskusage=$(df -H | grep -vE '^Filesystem|tmpfs|cdrom|mmcblk0p1' | awk '{ print $5 " " $1 }'| cut -f1 -d '%')
hostname=$(hostname)
tolerance=(85)
date=$(date)

if [[ "$diskusage" -gt "$tolerance" ]]
        then
        echo ""
        echo total disk usage is $diskusage%
        echo ""
        curl -X POST -H "Content-Type: application/json" -d '{"value1":"--Alert--","value2":"Total disk usage is '$diskusage'% ","value3":"Host information: '$hostname' "}' https://maker.ifttt.com/trigger/{alert}/with/key/PutYourKeyHEre
fi
echo ''
echo Disk usage is $diskusage%. The tolerance is $tolerance%. No alert fired $date
echo Disk usage is $diskusage%. The tolerance is $tolerance%. No alert fired $date >> /var/log/IFTTT/checkdiskspace.log

관련 정보