Wie funktioniert das Durchsuchen einer Datei (Suchen) oder die automatische Vervollständigung?

8

Ich bin ein Windows-Benutzer und komme aus Windows mit all den Indizierungs- und ewigen Wartezeiten bei der Suche nach Dateien. Ich finde es überraschend, wie schnell das Auffinden funktioniert oder die automatische Vervollständigung (die ich kenne) unter Linux funktioniert.

Wird im Hintergrund eine Indizierung durchgeführt oder wie wird dies erreicht? Ich habe immer noch eine ziemlich saubere Installation, daher geht dies mit der Zeit möglicherweise schief, aber in Windows müssen Sie in dem Moment, in dem Sie nach einem Ordner suchen möchten, der nicht indiziert ist, einige Sekunden warten.

oli206
quelle

Antworten:

18

Ich finde es überraschend, wie schnell das Auffinden von Arbeit oder die automatische Vervollständigung (die ich kenne) unter Linux funktioniert. ... Wird im Hintergrund eine Indizierung durchgeführt oder wie wird dies erreicht?

Dies sind eigentlich zwei völlig unterschiedliche Fragen.

locateVerwendet einen Index (Slocate speichert ihn in /var/lib/slocate/), der durch einen nächtlichen cronJob aktualisiert wird . Dieser nächtliche Job wird normalerweise um 1 oder 2 Uhr Ortszeit ausgeführt und scannt Ihr gesamtes System (einschließlich aller angeschlossenen Laufwerke) vollständig. Der resultierende Index ist einfach eine Liste von Dateinamen.

Die automatische Vervollständigung wird von Ihrer Shell übernommen. Die meisten Systeme verwenden dies bash, ebenso bash-completiondie Sammlung von Skripten, die die Funktionsweise verwalten. ( zshhat eine ähnlich benannte Sammlung, und die meisten anderen Shells verfügen über eine integrierte Form der Vervollständigung.) Wenn diese TabTaste gedrückt wird, führt sie ein Skript aus, das basierend auf dem, was Sie bereits eingegeben haben, entscheidet, was genau benötigt wird zu vervollständigen. Das Skript generiert dann eine Liste möglicher Vervollständigungen. Dies kann die Liste der Dateien im aktuellen Verzeichnis oder die Liste der ausführbaren Dateien in Ihrem sein $PATH. Der locateBefehl wird hierfür normalerweise nicht verwendet.

grau verblassen
quelle
1
Vielen Dank! Ich
verstehe
greyfade hat die Magie für immer ruiniert -_-
Michael Mrozek
@ Michael Mrozek: Entschuldigung. :(
greyfade
Die Shell führt ein Skript aus, das nicht 100% korrekt klingt. Bei der Implementierung einer Shell sollten die Leute nicht irregeführt werden, wenn sie denken, sie sollten externe Skripte schreiben. Es ist einfach eine Routine im Code selbst. Es kann zur Bequemlichkeit der Konfiguration auf externe Dateien zugreifen oder nicht, aber die einfache integrierte Vervollständigung funktioniert gut.
Aki
1
@NabinKhadka Da meine Antwort geschrieben wurde, denke ich, dass Ubuntu zu einem anderen locateDienst gewechselt ist . Ich weiß nicht welches - ich benutze kein Ubuntu - aber mlocate fällt mir ein. Überprüfen Sie /etc/updatedb.conf. Es kann den Standardpfad für jedes locateTool haben, das Sie haben.
Greyfade
5

Normalerweise verwendet locate einen Index, der einmal täglich über einen Cron-Job generiert wird (z. B. /etc/cron.daily/mlocate auf meinem System). Es macht nichts Besonderes, im Grunde genommen eine vollständige Durchquerung des Dateisystems mit einigen Optimierungen und dem Aufbau der Indexdatenstruktur.

Shells verwenden wahrscheinlich internes Caching für die Befehlsvervollständigung, verwenden jedoch keine globale Indexdatei. Außerdem verwalten Unix-Kernel normalerweise einen Dentry-Cache, dh sie zwischenspeichern Dateiverzeichnisinformationen, die von Verzeichnislisten usw. im Speicher verwendet werden (einschließlich der Angabe nicht vorhandener Dateien - was auch als inverses Caching bezeichnet wird).

maxschlepzig
quelle