`du -s .` и` du -hs .` дают разные результаты (на OS X)

12

Разница с и без -hдолжна быть только для человека, не так ли?

Ну видимо нет ...

$ du -s .
74216696    .
$ du -hs .
 35G    .

Или, может быть, я ошибаюсь, и результат du -s .не в КБ?

скрип
источник
3
Попробуйте использовать du --block-size=1024 -s .. Может быть, вы BLOCK_SIZEнастроены на512
Echoes_86
6
На странице справки (OSX): «Если BLOCKSIZE не установлен, а опция -k не указана, счетчики будут отображаться в 512-байтовых блоках»
user4556274
Что не очень полезно, если файловая система фактически находится в блоках по 4096 байт.
DopeGhoti
Так нет ли способа иметь размер в байтах? Я думал, что -hпросто
Creak
2
echo "74216696*512" | bcoutput, 37998948352. И да, -hпреобразуется в удобочитаемую форму путем деления снова и снова на 1024. Я получил 35,3887, что очень близко к тому, что duсообщается. Что касается размера в байтах, просто используйте --block-size=1. В Linux есть -bвариант для этого, но я не знаком с OS Xdu
Сергей Колодяжный

Ответы:

23

duбез спецификатора формата вывода дает использование диска в блоках по 512 байт, а не килобайт . -kВместо этого вы можете использовать опцию для отображения в килобайтах. В OS X (или macOS, или MacOS, или Macos; в зависимости от того, что вам нравится), вы можете настроить модуль по умолчанию, установив переменную среды BLOCKSIZE(это влияет и на другие команды).

DopeGhoti
источник
1
Не знал, что ... Какой интерес имеет количество блоков? Я никогда не видел, чтобы один человек использовал блоки, когда говорил о размерах на диске ...
Скрип
2
Блоки - это атомная единица файловых систем. Любой файл будет занимать целое количество блоков на диске. Блок может быть только частично заполнен фактическими данными, но весь блок выделяется для файла. Повседневное использование большинства людей не заботится о блоках, кроме как в процентах от использования к свободе. Но низкоуровневые утилиты (например fdisk, dfи du) работают в блоках, если не указано иное, потому что это единица, которой они учитываются внутри.
DopeGhoti
1
@Creak На самом деле, эта часть ответа была неправильной. Единица не является размером блока файловой системы. Для целей классических команд Unix, таких как du, «блок» означает 512 байт. См. Размер блока файла - разница между stat и ls , разница между размером блока и размером кластера
Жиль "ТАК - перестать быть злым"
3
«Любой файл будет занимать целое количество блоков на диске». Ну, в общем, да - если ваша файловая система не использует хвостовую упаковку . Но да, блоки являются основной единицей файловой системы (хотя фактический размер блока не обязательно совпадает с размером используемого блока du.) :)
Wildcard
3

Проблема в том, что duвозвращает размер в количестве блоков 512 байт.

Чтобы иметь размер в килобайтах, вы можете использовать -kопцию, которая вместо этого использует 1024-байтовые блоки:

$ du -ks .                            
43351596    .
$ du -khs .
 41G    .
скрип
источник