1

Mac Terminal df - это инструмент, который я использую для получения места на диске. Например, до того, как я получу новое программное обеспечение или обновление, я также запоминаю место на жестком диске до и после установки.

Я помню, что использовал эту команду с опциями -b, -k, -m или -g, чтобы получить размер в 512-байтовом блоке, килобайтах, мегабайтах или гигабайтах. Согласно man (ручное описание) df, эти опции также могут изменить BLOCKSIZE, так что если я потом буду использовать «df -h» или «df -H», результатом будет размер в двоичной или десятичной основе. Я помню, что пробовал это раньше, и это работало нормально.

В последнее время я пытаюсь использовать "df -b" для сброса BLOCKSIZE. Затем я снова пробую "df -h" или "df -H", я получаю значения размера все в гигабайтах (двоичные или десятичные), не ожидаемые в 512 байтах. Затем я пытаюсь использовать «df -hb» или «df -Hb», значения результата одинаковы (512-байтовый блок).

Вот несколько примеров, которые у меня были до этого:

$ df -k          # this command I get the expected result: 1024-block
Filesystem     512-blocks       Used     Available ...
/dev/disk1s2    97101344    403566296    572023048 ...
....

$ df -h         # the result in binary base, value in 1024-block
Filesystem     1024-blocks       Used      Avail ...
/dev/disk1s2    97101344    403566296  572023048 ...
....

$ df -H         # the result in decimal base, value in 1,000 base
Filesystem     Size         Used     Avail ...
/dev/disk1s2 99431776  413251887 585751601 ...
....

Как в приведенном выше примере, «df -k» сбрасывает BLOSKSIZE в килобайты. Однако сейчас я повторяю те же команды, но не могу получить те же результаты:

$ df -k          # this command I get the expected result: 1024-block
Filesystem     512-blocks       Used         Avail ...
/dev/disk1s2    97101344    403566296    572023048 ...
...

$ df -h         # the result in binary base but values in Gigabytes
Filesystem     Size    Used  Avail ...
/dev/disk1s2   465Gi  192Gi  273Gi ...
....

$ df -H         # the result in decimal base by values in Gigabytes
Filesystem     Size    Used  Avail ...
/dev/disk1s2   500G    207G   293G ...
....

Я не уверен, что мешает сбросу значения BLOCKSIZE. В результате я не могу получить размер в десятичном выражении (1000 для килобайтов в десятичном выражении, 1 000 000 для мегабайтов в десятичном выражении, ...).

Кстати, информацию об использовании df и BLOCKSIZE я получаю из:

$ man df

2 ответа2

1

Я думаю, что ваша память о том, как работала команда, неверна; df никогда не менял BLOCKSIZE , только временно его переопределяет. Фактически, он не может изменить BLOCKSIZE ни для чего, кроме себя - если вы запускаете df 3 раза, каждый экземпляр получает свою собственную копию среды вашей оболочки и может изменять свою собственную копию, но ничего не может сделать для среды оболочки (или другие экземпляры тоже).

Тем не менее, я думаю, что единственный способ получить желаемое поведение - это изменить BLOCKSIZE в среде оболочки:

export BLOCKSIZE=1000000   # Base-10 Megabytes
df   # No flags, so it uses the inherited BLOCKSIZE

Обратите внимание, что этот способ действий дает постоянное поведение, которое вы описываете; после установки BLOCKSIZE для родительской оболочки она передается всем командам, которые вы запускаете в этой оболочке с этого момента (до тех пор, пока вы не измените ее снова). Если вы хотите изменить его только для конкретной команды, используйте это вместо:

BLOCKSIZE=1000000 df   # Displays in base-10 Megabytes
df   # Displays in the default format
0

Это должно использовать блоки по умолчанию 512 байт:

df -P

При использовании удобочитаемого формата, как только показанное количество будет достаточным для следующего измерения, оно будет отображаться в этом (например, 1024M -> 1G)

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