Обычно, когда у меня есть программы, которые выполняют полное сканирование диска и просматривают все файлы в системе, они запускаются очень долго. Почему updatedb работает так быстро по сравнению?
источник
Обычно, когда у меня есть программы, которые выполняют полное сканирование диска и просматривают все файлы в системе, они запускаются очень долго. Почему updatedb работает так быстро по сравнению?
Ответ зависит от версии locate
вы используете, но есть шанс , что это mlocate
, чей updatedb
бежит быстро, избегая делать полное сканирование диска:
mlocate является реализацией locate / updatedb. «M» означает «объединение»: updatedb повторно использует существующую базу данных, чтобы избежать перечитывания большей части файловой системы, что делает updatedb быстрее и не перегружает системный кэш.
(В базе данных хранится метка времени каждого каталога, ctime
или mtime
, в зависимости от того, что новее.)
Как и большинство реализаций updatedb
, mlocate
's' также пропускает файловые системы и пути, которые он настроил игнорировать. По умолчанию нет ни в mlocate
случае «S, но дистрибутивы обычно обеспечивают основной , updatedb.conf
который игнорирует сетевые файловые системы, виртуальные файловые системы и т.д. (см файл конфигурации в Debian , например, это является стандартной практикой в Debian, так ГНУ updatedb
будет выполнено аналогично ).
mtime
его непосредственного родителя.mlocate
заботится оctime
иmtime
что означает , что заботится только о том списка записей каталога по - прежнему те же (не удалены или добавлены файлы), что означает , что не заботится о фактических самих файлов. Это верно ?locate
неgrep -R
. Он не читает содержимое файла.В дополнение к проверке времени модификации,
mlocate
также игнорируются некоторые поддеревья файловой системы, которые имеют много неинтересных или потенциально дублирующих файлов, как указано в /etc/updatedb.conf (и описано в man updatedb.conf ):источник
updatedb
реализации также поддерживают настроенные исключения.)