Получить свободное место на диске с помощью df, чтобы просто отобразить свободное место в килобайтах?
Я пытаюсь вывести количество свободного дискового пространства в файловой системе /example
,
Если я запускаю команду df -k /example
Я могу получить хорошую информацию о доступном дисковом пространстве в килобайтах, но только будучи человеком и фактически смотря на него.
Мне нужно взять эти данные и использовать их где-нибудь еще в моем сценарии оболочки. Я изначально думал об использовании cut
но тогда мой сценарий не будет переносимым на другие диски, так как свободное место на диске будет меняться, и обрезка не даст точных результатов.
Как я могу получить вывод только свободного дискового пространства, например, в кб?
5 ответов
Чтобы получить вывод df
для отображения данных в кб вам просто нужно использовать -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% /
Вы можете использовать команду stat(2) для отображения свободных блоков, а также для определения размера каждого блока, например
stat -f --printf="%a %s\n" /
отобразит количество свободных блоков (% a) в данной файловой системе (/), за которым следует размер блока (% s). Чтобы получить размер в килобайтах, вы можете использовать команду bc (1), как в следующем примере:
stat -f --printf="%a * %s / 1024\n" / | bc
Наконец, чтобы поместить это в переменную, нужно просто использовать подстановку с обратным тэгом (или $ (), как в первом ответе):
SOMEVAR=`stat -f --printf="%a * %s / 1024\n" / | bc`
Показывать только интересные колонки
df /example --total -k -h --output=source,avail
- --total = общий итог в конце
- -k = размер блока 1K
- -h = человек читаемый
- --output=[FIELD_LIST] список столбцов для отображения, разделенный знаком ","
Не совсем стандартно (я видел --output только в справочных страницах Ubuntu), в этом случае Awk и другие просто для удаления столбцов не нужны.
Это еще одно решение:
df --output=avail -m /example | tail -1
выход:
6415
Я создал небольшой скрипт, который извлекает используемое пространство файловой системы и преобразует общий размер используемого пространства в ГБ.
дф-Т | grep -vE "tmpfs|nfs|boot|overlay|vfat|cifs"| awk '{print $4}'|sed 's/.$//'| grep -vw "^Использовать"| вставить -s -d+|bc