1

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

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

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

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

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

2 ответа2

3

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

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

$ mount | grep sda1
/dev/sda1 on /boot type ext2 (rw,relatime,errors=continue,user_xattr,acl)
$ env stat -f /dev/sda2
 File: "/dev/sda1"
    ID: 0        Namelen: 255     Type: tmpfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 2560       Free: 2560       Available: 2560
Inodes: Total: 497355     Free: 496852
$ env stat -f /boot
  File: "/boot"
    ID: fe082d7c0c42ea6f Namelen: 255     Type: ext2/ext3
Block size: 1024       Fundamental block size: 1024
Blocks: Total: 99150      Free: 52490      Available: 47370
Inodes: Total: 25688      Free: 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

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

di -c

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .