Ответы:
Анализ может быть немного упрощен при использовании -P
опции, которая гарантирует, что:
- Информация о каждой файловой системе всегда печатается ровно в одну строку; устройство монтирования никогда не ставится на линию само по себе. Это означает, что если имя устройства монтирования имеет длину более 20 символов (например, для некоторых сетевых монтирований), столбцы будут выровнены неправильно.
Это значительно упрощает получение только свободного места:
$ df -Ph . | tail -1 | awk '{print $4}'
( -h
использует мегабайты, гигабайты и т. д. Если в вашей системе их нет, используйте -k
только для килобайтов.)
Если мы передадим df
путь, он вернет только 2 строки: строку заголовка и затем данные о файловой системе, которая содержит путь. Мы можем использовать хвост, чтобы захватить только второй ряд. Мы знаем, что доступное пространство находится в 4-м столбце, поэтому мы берем его с помощью awk
. Это все можно сделать с помощью awk
:
$ df -Ph . | awk 'NR==2 {print $4}'
или много других наборов фильтров .
$PWD
вместо использования подстановки команд и устраняя необходимость в хвосте: df -Ph $PWD | awk 'NR==2{print $4}'
awk
будет лучше. Я включил более длинную команду, потому что хотел получить пример того, как можно составить цепочку простых команд, чтобы сделать что-то более сложное. Я обновил ответ, чтобы включить ваше улучшение.
-P
стандартный ( P
для POSIX). Но -h
это расширение GNU (также существует в некоторых других системах, но, например, в OpenBSD оно несовместимо -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 }
) не обнаруживает значимой разницы в скорости, что не удивительно - вызов tail
не дорогой и awk
будет сэкономлен, чтобы пропустить до конца ввода ... Возможно, была разница PDP-11 ...
Как насчет того, чтобы делать df -h .
. Это даст вам доступное свободное пространство раздела, в котором находится ваш текущий рабочий каталог.
Небольшой пример:
/usr/local/nagios/libexec # df -h .
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-lvol1
9.9G 6.1G 3.4G 65% /
В байтах:
df --output=avail -B 1 "$PWD" | tail -n 1
Человек читаемый:
df --output=avail -h "$PWD" | tail -n 1
или
df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --to="iec"
или
df --output=avail -B 1 "$PWD" |tail -n 1 | numfmt --grouping
du -h
?