Пока я жил в мире * nix, я придерживался предположения, что когда команда принимает флаг -h единственное, что я менял, - это эффективное форматирование оператора печати. Я обычно не пересматриваю это, но определенно нашел, что это имеет место вообще.

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

>>> du -s
15565160    .
>>> du -sh
7.4G    .

Сначала я подумал, что просто ловлю каталог в странном месте, но обнаружил, что оба значения были достаточно постоянными, возвращая только слегка увеличенные / уменьшенные значения, пока я продолжал писать в каталог. Мое первое предположение было , что это было какое - то странное состояние посредника, но в этом случае я бы ожидал дикие колебания в результате du -s , что я не наблюдал.

Что тут происходит? Что такое номер 155... ? Не похоже, что это байты. Похоже, что между двумя примерно 450 То есть, если я умножу результат du -s на 450, я получу довольно близкое число байтов, подразумеваемых du -sh .

Большой вопрос, если я был неправ все время. Почему добавление флага -h в этом контексте делает что-то кроме изменения формата печати?

1 ответ1

4

Во-первых, вы правы. флаг -h (когда он не используется для печати текста справки) используется для указания различным приложениям преобразовывать вывод в «читаемый человеком формат». Это важно ... мы вернемся к этому. В частности, для du флаг -s дает сводку к своему обычному выводу для каждого каталога. По сути, это складывает все вместе.

По умолчанию du возвращает количество логических блоков, которые каталог и его содержимое занимают на носителе. Количество занятых блоков полезно для многих дисковых утилит и сценариев ... но не очень "читабельно". Флаг -h преобразует количество блоков обратно в число байтов, а затем округляет до ближайшего коэффициента 1024 (и нескольких других махинаций ... мы получаем гигабайты и одну цифру после десятичной дроби в вашем случае).

Учитывая то, что вы сказали, я готов поспорить, что ваша система настроена на размер блока 512 байт, потому что:

15565160 * 512/1024 ^ 3

Важно отметить, что du предполагает, что размер блока равен (по порядку) значению, установленному --block-size= , значению переменных среды DU_BLOCK_SIZE , BLOCK_SIZE или BLOCKSIZE или 1024 . 1024 байта - это общий размер блока по умолчанию, используемый большинством современных файловых систем. Но 512-байтовые блоки не особенно редки. Проверьте эти переменные, одна из которых, вероятно, установлена на 512. Или у вас может быть особенно старая версия du .

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