Normalerweise dauert die Ausführung von Programmen, die einen vollständigen Festplatten-Scan durchführen und alle Dateien im System durchsuchen, sehr lange. Warum läuft updatedb im Vergleich so schnell?
quelle
Normalerweise dauert die Ausführung von Programmen, die einen vollständigen Festplatten-Scan durchführen und alle Dateien im System durchsuchen, sehr lange. Warum läuft updatedb im Vergleich so schnell?
Die Antwort hängt von der Version von locate
Ihnen verwenden, aber es gibt eine faire Chance es ist mlocate
, das updatedb
läuft schnell durch Scans tun Full - Disk zu vermeiden:
mlocate ist eine locate / updatedb-Implementierung. Das 'm' steht für "Zusammenführen": updatedb verwendet die vorhandene Datenbank erneut, um zu vermeiden, dass der größte Teil des Dateisystems erneut gelesen wird. Dadurch wird updatedb schneller und der Systemcache wird nicht so stark geleert.
(In der Datenbank wird der Zeitstempel jedes Verzeichnisses ctime
oder mtime
, je nachdem, welcher neuer ist, gespeichert .)
Wie die meisten Implementierungen updatedb
, mlocate
‚s wird auch Dateisysteme und Pfade überspringen , die es so konfiguriert ist , zu ignorieren. Standardmäßig gibt es keine in mlocate
‚s Fall, aber Verteilungen typischerweise eine Basis bieten updatedb.conf
die Systeme vernetzen Datei ignoriert, virtuelle Dateisysteme usw. (siehe Debians Konfigurationsdatei zum Beispiel, das ist gängige Praxis in Debian, so GNU updatedb
ist ähnlich konfiguriert ).
mtime
seines unmittelbaren Elternteils ändern .mlocate
kümmert es michctime
undmtime
was bedeutet, dass es nur darum geht, ob die Liste der Verzeichniseinträge immer noch dieselbe ist (keine entfernten oder hinzugefügten Dateien), was bedeutet, dass es sich nicht um tatsächliche Dateien selbst handelt. Ist das korrekt ?locate
ist nichtgrep -R
. Es werden keine Dateiinhalte gelesen.mlocate
Ignoriert nicht nur die Änderungszeiten, sondern auch bestimmte Teilbäume des Dateisystems mit vielen uninteressanten oder möglicherweise doppelten Dateien, wie in /etc/updatedb.conf angegeben (und in man updatedb.conf beschrieben ):quelle
updatedb
Implementierungen unterstützen auch konfigurierte Ausschlüsse.)