почему du -b и du -k так сильно отличаются

Я использую Ubuntu 16.04.5 LTS, а версия du — 8.25. Теперь у меня вопрос:

$ du -b /var/log/lastlog
69788251412 /var/log/lastlog

размер соответствует команде ls -al. Пока я использую du -k, у него другой результат:

$ du -k /var/log/lastlog
80 /var/log/lastlog

Два результата не совпадают, почему?

из

1 ответ
1

/var/log/lastlog представляет собой двоичный файл, используемый в режиме «произвольного доступа», а не журнал, добавленный к нему, и, таким образом, естественно разреженный файлв виде отмечено в этом руководстве (GNU/Linux):

ПРИМЕЧАНИЕ

Файл lastlog представляет собой базу данных, которая содержит информацию о последнем входе в систему каждого пользователя. Вы не должны вращать его. Это разреженный файл, поэтому его размер на диске обычно намного меньше, чем тот, который показывает «ls -l» (что может указывать на действительно большой файл, если у вас в passwd есть пользователи с высоким UID). Вы можете отобразить его реальный размер с помощью «ls -s».

Разреженный означает, что фактическое использование диска меньше его видимого размера.

В GNU/Linux -b вариант для du описывается как:

-b, --bytes

эквивалентно --apparent-size --block-size=1

То есть, -b явно отключает обнаружение и обработку разреженных файлов, включая --apparent-size.

Таким образом, чтобы размер в байтах соответствовал -k (фактическое использование на диске) вместо этого используйте:

du --block-size=1 /var/log/lastlog

или чтобы размер соответствовал КиБ -b (с видимым размером) используйте вместо этого:

du --apparent-size -k /var/log/lastlog

АБ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *