Я использую 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 ответ
/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
АБ