Непоследовательный вывод команды `du`

Непоследовательный вывод команды `du`

Почему вывод

du -sch ./

не идентичен

du -sch ./*

Например, я запустил du -schв домашнем каталоге пользователя и получил 51 ГБ, но запуск du -sch *в том же каталоге дает 47 ГБ. Сначала я подумал, что, возможно, это учет скрытых файлов, но это не объясняет почти 4 ГБ скрытых файлов/папок.

Я прочитал руководство по дисковой утилите, но не смог найти объяснения.

решение1

Сначала я подумал, что, возможно, это связано со скрытыми файлами, но это не объясняет почти 4 ГБ скрытых файлов/папок.

Как вы это измерили? Я думаю, выделатьиметь 4 ГБ скрытых файлов/каталогов, или, может быть, даже больше (в некотором смысле), если задействованы жесткие ссылки.

Это скажет вам (я отказался, -hчтобы получить более точные результаты; tailнужно передать только «итого»; проверено в bash):

du -sc ./{.[!.],..?}*  | tail -n 1   # hidden
du -sc ./*             | tail -n 1   # non-hidden
du -sc ./{.[!.],..?,}* | tail -n 1   # hidden and non-hidden by wildcards
du -sc ./              | tail -n 1   # directory as a whole

(синтаксис взят изэтот ответ).

Первая команда — это то, чего вам не хватает. Получите сумму первого и второго результата; она будет равна последним двум результатам, если только...

Если только между скрытой и не скрытой частью нет файлов с жесткой ссылкой. Если так, то сумма будет еще больше, потому чтоэти файлы будут учтены дважды, когда вы суммируете их вручную, но только один раз, когда он duсуммирует их за вас за один проход. В этом случае скрытые файлы/каталоги занимают даже больше места, чем вы думаете (хотя часть этого пространства «делится» с не скрытой частью). Обратите внимание, что есть-lвариантduкоторый контролирует это поведение:

-l, --count-links
подсчитывайте размеры много раз, если есть жесткая связь

Связанный контент