`du -s .` і` du -hs .` дає різні результати (в ОС 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якраз ділиться на 1024 і додаю деякі одиниці
Creak

2
echo "74216696*512" | bcВихідні дані, 37998948352. І так, -hперетворюється в читану людиною форму, поділяючи її знову на 1024. Я отримав 35.3887, що дуже близько до duзвітів. Що стосується розміру в байтах, просто використовуйте --block-size=1. В Linux є -bваріант для цього, але я не знайомий з OS Xdu
Сергій Колодяжний

Відповіді:


23

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


1
Я не знав цього ... Який інтерес у кількості блоків? Я ніколи не бачив жодної людини, яка використовувала блоки, коли говорила про розміри на диску ...
Creak

2
Блоки - це атомна одиниця файлових систем. Будь-який файл буде споживати цілу кількість блоків на диску. Блок може бути частково заповнений фактичними даними, але весь блок виділяється у файл. Повсякденне використання більшості людей не стосується блоків, окрім як у відсотках, використаних проти вільного. Але утиліти низького рівня (наприклад fdisk, dfі du) працюють у блоках, якщо не вказано інше, тому що це одиниця, за якою вони рахуються внутрішньо.
DopeGhoti

1
@Creak Власне, та частина відповіді була неправильною. Пристрій не є розміром блоку файлової системи. Для цілей класичних команд Unix, таких як du"блок" означає 512 байт. Дивіться розмір блоку файлів - різниця між stat та ls , Різниця між розміром блоку та розміром кластера
Gilles 'SO- перестаньте бути злим'

3
"Будь-який файл буде містити цілу кількість блоків на диску." Ну, як правило, так - якщо ваша файлова система не використовує хвостову упаковку . Але так, блоки - це основна одиниця файлової системи (хоча фактичний розмір блоку не обов'язково співпадає з розміром блоку, який використовує du.) :)
Wildcard

3

Проблема полягає в тому, що duповертає розмір у кількості блоків 512 байт.

Для того щоб мати розмір у КБ, ви можете використовувати -kопцію, яка використовує замість цього 1024-байтові блоки:

$ du -ks .                            
43351596    .
$ du -khs .
 41G    .
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.