Odpowiedzi:
Dane wyjściowe można nieco łatwiej przeanalizować, korzystając z -P
opcji, która zapewni:
- Informacje o każdym systemie plików są zawsze drukowane dokładnie w jednym wierszu; urządzenie do montowania nigdy nie jest samo w sobie ustawiane na linii. Oznacza to, że jeśli nazwa urządzenia do montowania ma więcej niż 20 znaków (np. W przypadku niektórych montowań sieciowych), kolumny nie są wyrównane.
To znacznie ułatwia uzyskanie dostępnej wolnej przestrzeni:
$ df -Ph . | tail -1 | awk '{print $4}'
( -h
używa megabajtów, gigabajtów itd. Jeśli twój system go nie ma, używaj -k
tylko dla kilobajtów).
Jeśli przekażemy df
ścieżkę, zwróci tylko 2 wiersze: wiersz nagłówka, a następnie dane o systemie plików, który zawiera ścieżkę. Możemy użyć ogona, aby złapać tylko drugi rząd. Wiemy, że dostępne miejsce znajduje się w czwartej kolumnie, więc sięgamy po to awk
. Wszystko to można zrobić za pomocą awk
:
$ df -Ph . | awk 'NR==2 {print $4}'
lub wiele innych zestawów filtrów .
$PWD
zamiast zastępowania poleceń i eliminując potrzebę tail: df -Ph $PWD | awk 'NR==2{print $4}'
awk
jest lepsze. Dołączyłem dłuższe polecenie, ponieważ chciałem mieć przykład tego, jak można zbudować łańcuch prostych poleceń, aby zrobić coś bardziej skomplikowanego. Zaktualizowałem odpowiedź, aby uwzględnić Twoje ulepszenie.
-P
jest standardem ( P
dotyczy POSIX). Ale -h
jest rozszerzeniem GNU (istnieje także w niektórych innych systemach, ale np. W OpenBSD jest niekompatybilny -P
).
df -h --output=avail . | tail -1
time { I=0; while [ $I -lt 10000 ]; do df -Ph . | awk 'NR==2 {print $4}' > /dev/null; ((I++)); done }
) nie ujawnia żadnej znaczącej różnicy prędkości, co nie jest zadziwiające - wywoływanie tail
nie jest drogie i awk
oszczędza się przeskakiwania do końca danych wejściowych ... Mogła być różnica na PDP-11 ...
Jak o zrobieniu df -h .
. Zapewni to dostępne wolne miejsce na partycji, w której znajduje się bieżący katalog roboczy.
Mały przykład:
/usr/local/nagios/libexec # df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-lvol1
9.9G 6.1G 3.4G 65% /
W bajtach:
df --output=avail -B 1 "$PWD" | tail -n 1
Czytelny dla człowieka:
df --output=avail -h "$PWD" | tail -n 1
lub
df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --to="iec"
lub
df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
du -h
?