Aby df
obliczyć sumy, użyj --totals
opcji. Jeśli chcesz, aby sumy były tylko dla niektórych wybranych dysków, podaj je jako argumenty.
Przykłady (i dane wyjściowe z mojego komputera)
Jest to suma dla wszystkich lokalnych montowań:
$ 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%
Ograniczenie do kilku dysków (zwróć uwagę, że jeśli podana ścieżka nie jest dokładnym punktem montowania, używany jest najbliższy zawierający punkt montowania [patrz uwaga na końcu] ):
$ 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%
lub używając dev
nazw:
$ 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%
Dalsze dostosowanie
Jeśli chcesz wyświetlić listę wszystkich montowań oprócz „specjalnych”, możesz użyć -x
opcji wykluczania według typu partycji. (Użyj -T
opcji, aby wyświetlić typy.)
Osobiście do celów interaktywnych używam następującego aliasu bash (dodanego do ~/.bash_aliases
), aby wykluczyć montaże „niefizyczne”.
alias df='df -h -x devtmpfs -x tmpfs -x debugfs'
Uwaga
Określenie ścieżek w punktach podłączenia może czasem dać wyniki w innej formie, określając dokładną ścieżkę do punktu podłączenia. Na przykład na laptopie używam sshfs
do montowania (lokalnego) serwera plików.
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
Serwer root ( /
) jest zamontowany na ~/.server-root
. Jednak na serwerze dyski są montowane /disks/*
, o których df
(na laptopie) nie wiadomo.
Oczywiście df
można wymienić użycie dysku na różnych mocowaniach na serwerze, jeśli podano odpowiednie ścieżki. Pokazuje jednak ten sam „system plików” i „zamontowany” dla wszystkich ścieżek, ponieważ (uważam) jest to jedyny punkt montowania (związany z tym sshfs
montowaniem) w lokalnej tabeli montowania jądra.
Kolejna sprawa: nie bardzo związana z pytaniem, ale związana z poprzednią odpowiedzią na pytanie.
Sumowanie liczb za pomocą awk
skryptu (lub podobnego), podobnie jak niektóre wcześniej opublikowane odpowiedzi, nie jest dobrym pomysłem podczas korzystania z -h
flagi. Jest tak, ponieważ wymagana jest specjalna obsługa. Nie możesz po prostu zrobić size+=$2;
dla pola, które jest 418M
w jednym rzędzie i 12G
w drugim, i uzyskać z niego coś pożytecznego…
Na przykład z awk
dodawaniem 500M
do 10.2G
wydajności
$ echo -e '500M\n10.2G' | awk '{size+=$1;} END{print size;}'
510.2
510,2 czego?
Tutaj jest wyraźnie problem. Tak więc, jako wskazówka do zapamiętania , kiedy wykonujemy (automatyczne) obliczenia na wyjściu df
(i innych, które mogą używać liczb „czytelnych dla człowieka” ) . Upewnij się, że nie używasz -h
flagi i że dane wejściowe do skryptu obliczeniowego są znormalizowane (na przykład do bajtów, bloków, KB itp.) I wykonaj „skalowanie wyświetlania” na końcu. W większości języków skryptowych i programowych nie jest trudno dodać coś takiego:
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...)
gdzie wartość jest w bajtach, a próg jest wartością rzędu 1000. Rezultatem tej metody jest to, że można ją łatwo dostroić, aby uzyskać wydrukowane wartości (z wyłączeniem prefiksu) w pożądanym zakresie i za pomocą szeregu znaczących cyfr wybierając W porównaniu do przypadku ze standardowymi narzędziami z -h
przełącznikami, w których format jest często ustalony.
Oczywiście obliczenia te często można uczynić bardziej wydajnymi i / lub eleganckimi, ale jest to pytanie dotyczące konkretnego języka, w którym jest napisany. Szczerze mówiąc, jeśli jest ono używane w skrypcie użytkownika uruchamianym tylko od czasu do czasu w celu interaktywnego przeglądania trochę informacji, wydajność tak naprawdę nie stanowi problemu.