2014-12-15 17 views
6

jest polecenie w bashu, które może podać całkowitą liczbę numerów dysku/dysku twardego.Komenda linux do wyszukiwania całkowitych numerów dysków i dysków twardych

wiem komenda df jest bardzo pomocne, ale wyjście jest zbyt gadatliwy:

# df -h 
    Filesystem  Size Used Avail Use% Mounted on 
    /dev/sda4  721G 192G 492G 29%/
    tmpfs   129G 112K 129G 1% /dev/shm 
    /dev/sda1  194M 92M 93M 50% /boot 
    /dev/sdj1  917G 547M 870G 1% /data10 
    /dev/sdk1  917G 214G 657G 25% /data11 
    /dev/sdl1  917G 200M 871G 1% /data12 
    /dev/sdm1  917G 200M 871G 1% /data13 
    /dev/sdn1  917G 200M 871G 1% /data14 
    /dev/sdo1  917G 200M 871G 1% /data15 
    /dev/sdp1  917G 16G 855G 2% /data16 
    /dev/sdb1  917G 4.6G 866G 1% /data2 
    /dev/sdc1  917G 74G 797G 9% /data3 
    /dev/sdd1  917G 200M 871G 1% /data4 
    /dev/sde1  917G 200M 871G 1% /data5 
    /dev/sdf1  917G 200M 871G 1% /data6 
    /dev/sdg1  917G 764G 107G 88% /data7 
    /dev/sdh1  917G 51G 820G 6% /data8 
    /dev/sdi1  917G 19G 853G 3% /data9 
    /dev/sda2  193G 53G 130G 30% /home 
    cm_processes 129G 46M 129G 1% /var/run/cloudera-scm-agent/process 

Chcę zasadniczo „16 TB” w końcu, czy istnieje komenda poręczne lub muszę napisać jakiś program do obliczania całkowity dysk oparty na wyjściu z df.

Odpowiedz

4

Co o:

df --total 

Podpowiedź: pierwsze spojrzenie na stronę ręcznego: man df. W dzisiejszych czasach ciężko jest znaleźć aspekty programu, który nie został zaimplementowany przez jakąś ładną flagę. Linux ludzie po prostu wydają się wiedzieć, czego programiści chcą/potrzebują.

Lub jeśli chcesz tylko całkowita:

df --total | tail -n 1 

A jeśli chcesz określić go w specjalnym rozmiar bloku (jak TB), można ustawić -B flag

df --total -BT | tail -n 1 

I w przypadku, gdy interesuje Cię tylko całkowity rozmiar (na przykład chcesz użyć wyniku w innym programie bash):

df --total -BT | tail -n 1 | sed -E 's/total *([^ ]*).*/\1/' 
+0

Niektóre wersje ' df' nie zawierają '--total' (jak moje). –

+0

@Jidder: jaka jest wersja 'df'? 'df --version' ... Dla wersji 8.21 działa to dobrze. –

+0

'df (GNU coreutils) 5.93' to dość stare, po prostu pomyślałem, że o tym wspomnę. –

2

odpowiedź CommuSoft jest ładniejszy, ale tutaj jest inne rozwiązanie używając awk:

df -m | awk '{ SUM += $2} END { print SUM/1024/1024"TB" }' 

pomocą opcji -m uczynić wyniki df być wyświetlane w tej samej jednostce (MB). Prosty podział może łatwo przetłumaczyć wynik na TB.

2

Inne rozwiązanie z wykorzystaniem awk. Będzie to wydrukować nagłówek i wszystkich linii:

df --total -h | awk '!/^\//' 
  • awk komenda drukuje wszystkie wiersze z wyjątkiem tych, którzy zaczynają z charakterem /.
  • df z -h lub --human-readable rozmiarami wydruku w potęgach 1024 (np. 1023M).

Wola wynik wygląda następująco:

Filesystem  Size Used Avail Use% Mounted on 
total   3.9T 1.7T 2.3T 42% - 

Jak Mounted on pole jest bezużyteczny, można go usunąć poprzez dodanie sed do poprzedniego polecenia:

$ df --total -h | awk '!/^\//' | sed -E 's/Mounted on|\s-//' 
Filesystem  Size Used Avail Use% 
total   3.9T 1.7T 2.3T 42%