Найти доступное дисковое пространство в unix без анализа вывода `df`

1862
Niraj

Когда я печатаю df -k ., я получаю следующий вывод

Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 16512936 8650196 7023932 56% / 

Что я делаю, так это хвост последней строки и извлечение четвертого поля, чтобы получить его правильно.

Но если имя файловой системы длинное, например /dev/niraj-asdsdsd-dsdsdsa, например, то dfпечатает дополнительную информацию в новой строке и, используя мою логику, я получаю 56% вместо 7023932 .

Итак, мой вопрос, как определить точное свободное место в любой ситуации?

1

2 ответа на вопрос

3
mpy

statУтилита, которая удобна для быстрого получения статистики файлов, а также может дать вам информацию о файловых системах, просто поставить -fопцию.

Но убедитесь, что вы указали точку монтирования (например /boot), а не файл устройства ( /dev/sda1)! Потому что в последнем случае statбудет отображаться статистика /devфайловой системы, которая является (на debian) виртуальной файловой системой и не имеет ничего общего с физическим диском:

$ mount | grep sda1 / dev / sda1 on / тип загрузки ext2 (rw, relaytime, ошибки = продолжить, user_xattr, acl) $ env stat -f / dev / sda2 Файл: "/ dev / sda1" ID: 0 Namelen: 255 Тип: tmpfs Размер блока: 4096 Размер основного блока: 4096 Блоки: Всего: 2560 Свободно: 2560 Доступно: 2560 Иноды: Всего: 497355 Свободно: 496852 $ env stat -f / boot Файл: "/ boot" ID: fe082d7c0c42ea6f Namelen: 255 Тип: ext2 / ext3 Размер блока: 1024 Размер основного блока: 1024 Блоки: Всего: 99150 Свободно: 52490 Доступно: 47370 Иноды: Всего: 25688 Свободно: 25355 
  • Разница между свободным и доступным счетчиком получается из зарезервированных блоков для root .
  • Я использовал, envчтобы убедиться, что не используется встроенная команда stat вашей оболочки (которая может или не может обеспечить все используемые параметры).

Итак, чтобы ответить на ваш вопрос, вы можете использовать настраиваемый -cформат вывода статистики ( ), чтобы получить доступное пространство ( %a) для /:

$ env stat -f -c %a / 1711744 

Это в блоках, так что будьте умны и позвольте системе сделать умножение с размером блока в килобайтах ( %S/1024), передавая вывод в bcкалькулятор:

$ env stat -f -c '%a*%S/1024' / | bc 6846976 

Давайте проверим с df:

$ df / Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 25066604 16939628 6846976 72% / 

Хорошо, тот же номер сообщил!

0
Optichip

Нирадж - Вы смотрели на утилиту ди? Это может предложить как минимум более простой способ извлечения необходимых данных, он предлагает вывод в формате CSV дискового пространства.

di -c 

Похожие вопросы