По умолчанию du
каждый файл будет учитываться только один раз, если он связан несколько раз. Если вы запустите du -L bar
его, он будет считать файл, потому что он достигает его только один раз. Однако, если вы запустите du -L *
его, он будет считать только в первый раз. Например:
$ du -L foo bar
16K foo
4.0K bar
$ du -L bar foo
16K bar
4.0K foo
Обратите внимание, что при изменении порядка аргументов папка будет отображаться как 16K.
Вы можете принудительно du
посчитать файл дважды, передав -l
параметр.
Редактировать:
Символьные ссылки - это особый вид файла, и для перехода по ссылке необходим дополнительный шаг. du
не будет переходить по символическим ссылкам, если -L
опция не включена.
С другой стороны, жесткая ссылка - это один файл, существующий в двух (или более) папках. du
предположительно отслеживает, какие файлы он видел по номеру инода, чтобы избежать их повторного подсчета. -l
отключает это поведение
Так, с just -L
, он будет следовать по символической ссылке, но если целевой файл имеет номер инода, он уже видел, что он не будет пересчитан. Просто -l
он будет считать дубликаты жестких ссылок, но не будет переходить по символическим ссылкам.
Если вы используете -l
и -L
вместе, он будет следовать по символическим ссылкам, а также позволит подсчитывать целевой файл (ы) более одного раза.
du
хочет играть умно, но если вы запустите,df -a -L bar foo
результат будет очень неправильным (считая 16K в баре, оставляя foo пустым).