Подтвердить что ты не робот

Получите свободное место на диске с df, чтобы просто отображать свободное пространство в kb?

Я пытаюсь вывести количество свободного места на диске в файловой системе /example.

Если я запустил команду df -k /example, я могу получить хорошую информацию о доступном дискового пространства в kb, но только будучи человеком и фактически смотрю на нее.

Мне нужно взять эти данные и использовать их где-то еще в моей оболочке script. Сначала я думал об использовании cut, но тогда мой script не будет переноситься на другие диски, поскольку свободное место на диске будет меняться и сокращаться не даст точных результатов.

Как я могу получить вывод только свободного дискового пространства примера в kb?

4b9b3361

Ответ 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