Получите свободное место на диске с df, чтобы просто отображать свободное пространство в kb?
Я пытаюсь вывести количество свободного места на диске в файловой системе /example
.
Если я запустил команду df -k /example
, я могу получить хорошую информацию о доступном дискового пространства в kb, но только будучи человеком и фактически смотрю на нее.
Мне нужно взять эти данные и использовать их где-то еще в моей оболочке script. Сначала я думал об использовании cut
, но тогда мой script не будет переноситься на другие диски, поскольку свободное место на диске будет меняться и сокращаться не даст точных результатов.
Как я могу получить вывод только свободного дискового пространства примера в kb?
Ответы
Ответ 1
Чтобы получить вывод df
для отображения данных в kb, вам просто нужно использовать флаг -k
:
df -k
Кроме того, если вы укажете файловую систему на df
, вы получите значения для этого конкретного, а не для всех из них:
df -k /example
Что касается тела вашего вопроса: вы хотите извлечь объем свободного места на диске в данной файловой системе. Для этого потребуется некоторая обработка.
Для нормального вывода df -k
:
$ df -k /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 7223800 4270396 2586456 63% /
Вы можете получить Available
(4-й столбец), например, с помощью awk
или cut
(ранее прокладывая до tr
до squeeze-repeats
(-s
) для пробелов):
$ df -k /tmp | tail -1 | awk '{print $4}'
2586456
$ df -k /tmp | tail -1 | tr -s ' ' | cut -d' ' -f4
2586456
Как всегда, если вы хотите сохранить результат в переменной, используйте синтаксис var=$(command)
следующим образом:
$ myUsed=$(df -k /tmp | tail -1 | awk '{print $4}')
$ echo "$myUsed"
2586456
Кроме того, из комментария вы можете обрабатывать длинные имена файловой системы, используя --direct
, чтобы получить вместо этого -
, чтобы он не печатал линия, которая ломает двигатель:
$ df -k --direct /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
- 7223800 4270396 2586456 63% /
Ответ 2
Вы можете использовать команду stat (2) для отображения свободных блоков, а также выяснить, насколько велики каждый блок, например
stat -f --printf="%a %s\n" /
отобразит количество свободных блоков (% a) в данной файловой системе (/), за которой следует размер блока (% s). Чтобы получить размер в kB, вы можете использовать команду bc (1), как в следующем примере:
stat -f --printf="%a * %s / 1024\n" / | bc
Наконец, для того, чтобы поместить это в переменную, нужно просто использовать подстановку backtick (или $(), как в первом ответе):
SOMEVAR=`stat -f --printf="%a * %s / 1024\n" / | bc`
Ответ 3
Показать только интересные столбцы
df /example --total -k -h --output=source,avail
- - total = общее количество в конце
- -k = размер блока 1K
- -h = читаемый человеком
- - output = [FIELD_LIST] список столбцов для отображения разделенных символами ","
Не полностью стандартный (я видел - выход только в man-страницах Ubuntu), в этом случае Awk и другие просто удалить столбцы не нужны.
Ответ 4
Это еще одно решение:
df --output=avail -m /example | tail -1
вывод:
6415