Получить свободное место на диске с помощью 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
Другие вопросы по тегам