df -hl
크기, 사용된 비율, 여유 공간을 포함한 모든 파티션의 목록이 출력된다는 것을 알고 있습니다 .
예를 들어 sum 의 크기와 사용량만 출력하려는 경우 sda2
Linux(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;
유용한 정보를 얻을 수는 없습니다 .418M
12G
예를 들어 , 수익률 에 awk
추가500M
10.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