Чому програма `updatedb` працює так швидко?


22

Зазвичай, коли у мене є програми, які виконують повне сканування диска і переглядають усі файли в системі, вони запускають дуже багато часу. Чому updateb працює так швидко порівняно?

Відповіді:


22

Відповідь залежить від версії locateви використовуєте, але є шанс , що це mlocate, чий updatedbбіжить швидко, уникаючи робити повне сканування диска:

mlocate - це реалізація locate / updatedb. 'M' означає «злиття»: updatedb повторно використовує наявну базу даних, щоб уникнути повторного перечитування більшості файлової системи, що робить updateb швидше і не втрачає кеш систем.

(У базі даних зберігаються часові позначки кожного каталогу, ctimeабо те mtime, що відбувається новіше.)

Як і більшість реалізацій updatedb, mlocate's також буде пропускати файлові системи та шляхи, які він налаштований ігнорувати. За замовчуванням немає ні в mlocateразі «S, але дистрибутиви зазвичай забезпечують основний , updatedb.confякий ігнорує мережеві файлові системи, віртуальні файлові системи і так далі (див файл конфігурації в Debian , наприклад, це є стандартною практикою в Debian, так ГНУ updatedbбуде виконано аналогічно ).


Досить гарне запитання та відповідь, навіть не знав, що існують "диференціальні" сканування.
Rui F Ribeiro

1
Спасибі! Я ніколи не помічав, що зміна файлу також змінює ctime та mtime всіх його батьківських каталогів.
hugomg

4
@hugomg Я не думаю, що це насправді так. Він повинен змінити лише mtimeсвого найближчого батька.
Kusalananda

Тож якщо я правильно це зрозумів, його mlocateцікавить, ctimeа mtimeце означає, що його хвилює лише те, чи список записів у каталозі все-таки такий самий (жодних видалених чи доданих файлів), це означає, що він не дбає про самі фактичні файли. Це правильно ?
Сергій Колодяжний

@ Сергій: Звичайно. locateні grep -R. Він не читає вміст файлу.
Кевін

9

На додаток до перевірки часу модифікації, mlocateтакож ігнорується певні піддерев'я файлової системи, які містять безліч нецікавих або потенційно дублюючих файлів, як зазначено в /etc/updateb.conf (і описано в man updatedb.conf ):

  • Прив’яжіть кріплення
  • Деякі види файлових систем (9p, afs, bdev тощо)
  • Бази даних сховища VCS (.git, .hg тощо)
  • Деякі каталоги з жорстким кодом (/ media, / tmp, / var / spool / cups тощо).

Однак це не за замовчуванням, тому поведінка бази залежить від використовуваного розподілу. (Інші updatedbреалізації також підтримують налаштовані виключення.)
Стівен Кітт

Справді. Я описував за замовчуванням Fedora.
hugomg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.