답변:
들어 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?
여기에는 분명히 문제가 있습니다. 따라서 출력 (및 사람이 읽을 수있는 숫자를 사용할 수있는 다른 것 )에 대한 (자동화 된) 계산을 수행 할 때 기억해야 할 팁 입니다. 플래그를 사용 하지 말고 계산 스크립트에 대한 입력이 정규화되어 있는지 (예 : 바이트, 블록, KB 등) 확인하고 마지막에 '디스플레이 스케일링' 을 수행하십시오. 대부분의 스크립팅 및 프로그래밍 언어에서 다음과 같은 것을 추가하는 것은 어렵지 않습니다.df
-h
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...)
여기서 value 는 바이트 단위이고 threshold 는 1000 정도의 값입니다.이 방법의 요점은 원하는 범위에서 원하는 유효 숫자의 숫자로 인쇄 된 값 (접두사 제외)을 생성하도록 쉽게 조정할 수 있다는 것입니다. 고르는. -h
형식이 종종 고정되는 스위치가있는 표준 유틸리티의 경우와 비교됩니다 .
물론,이 계산은 종종보다 효율적이고 우아하게 만들어 질 수 있지만, 그것이 쓰여진 특정 언어에 대한 질문입니다. 솔직히, 지금 만 실행되고 대화식으로 볼 수 있는 사용자 스크립트 에서 사용된다면 일부 정보에서 효율성은 실제로 문제가되지 않습니다.
난 당신이 둘의 합을 원 생각 size
하고use%
df -hl | grep 'sda2\|sda3' | awk 'BEGIN{print "Size","Use%"} {size+=$2;percent+=$5;} END{print size,percent}' | column -t
size+=$1
. 이 방법은의 -h
옵션 과 실제로 호환되지 않습니다 df
.
다음과 같은 도구를 사용합니다 awk
.
df -hl | awk '/^\/dev\/sd[ab]/ { sum+=$5 } END { print sum }'
어디:
/^\/dev\/sd[ab]/
/dev/sda
또는로 시작하는 행만 필터링하기위한 패턴입니다./dev/sdb
{ sum+=$5 }
위 패턴과 일치하는 다섯 번째 필드를 추가하십시오.유용한 awk
참고 자료는Awk.info 위키 .
당신이 경고와 함께 그것을 원한다면, 나는 IFTTT, Telegram And 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