Linux Locate-Befehl für Einsteiger (8 Beispiele)

Während find zweifellos eines der beliebtesten und leistungsfähigsten Kommandozeilenprogramme für die Dateisuche in Linux ist, ist es nicht schnell genug für Situationen, in denen Sie sofortige Ergebnisse benötigen. Wenn Sie eine Datei auf Ihrem System über die Befehlszeile suchen wollen und Geschwindigkeit die oberste Priorität ist, dann gibt es einen anderen Befehl, den Sie verwenden können: Locate.

In diesem Tutorial werden wir den Befehl locate anhand von leicht verständlichen Beispielen besprechen. Bitte beachten Sie, dass alle hier erwähnten Anweisungen/Beispiele auf Ubuntu 16.04 LTS getestet wurden und die von uns verwendete locate-Version 0.26 ist.

Wie man den locate-Befehl in Linux verwendet

Der locate-Befehl ist sehr einfach zu verwenden. Alles, was Sie tun müssen, ist, ihm den Dateinamen zu übergeben, den Sie suchen wollen.

locate 

Wenn ich zum Beispiel nach allen Dateinamen suchen will, die die Zeichenkette ‚dir2‘ enthalten, dann kann ich das mit locate auf folgende Weise tun:

Hinweis: Der Befehl ‚locate dir2‘ (ohne Sternchen) funktioniert auch, da locate den übergebenen Namen (sagen wir NAME) implizit durch *NAME* ersetzt.

Wie der Befehl locate funktioniert, oder warum er so schnell ist

Der Grund, warum locate so schnell ist, ist, dass es nicht das Dateisystem nach dem gesuchten Datei- oder Verzeichnisnamen durchsucht. Es bezieht sich vielmehr auf eine (mit dem Befehl updatedb vorbereitete) Datenbank, um herauszufinden, wonach der Benutzer sucht, und erzeugt auf der Grundlage dieser Suche seine Ausgabe.

Dies ist zwar ein guter Ansatz, hat aber auch seine Nachteile. Das Hauptproblem besteht darin, dass nach dem Anlegen einer neuen Datei oder eines neuen Verzeichnisses auf dem System die Datenbank des Tools aktualisiert werden muss, damit es korrekt funktioniert. Andernfalls ist der Befehl nicht in der Lage, Dateien/Verzeichnisse zu finden, die nach der letzten Datenbankaktualisierung erstellt wurden.

Wenn ich zum Beispiel versuche, Dateien mit Namen zu finden, die die Zeichenkette „tosearch“ im Verzeichnis „Downloads“ meines Systems enthalten, erzeugt der Befehl find ein Ergebnis in der Ausgabe:

Wenn ich aber versuche, die gleiche Suche mit dem Befehl locate durchzuführen, erzeugt er keine Ausgabe.

Das bedeutet, dass die Datenbank, in der locate sucht, nicht aktualisiert wurde, nachdem die Datei auf dem System erstellt wurde. Aktualisieren wir also die Datenbank, was mit dem Befehl updatedb geschehen kann. So geht’s:

sudo updatedb

Und wenn ich jetzt denselben locate-Befehl noch einmal ausführe, zeigt er Dateien in der Ausgabe an:

Nach dem Entfernen einer Datei oder eines Verzeichnisses müssen Sie sicherstellen, dass die locate-Datenbank aktualisiert wurde, da der Befehl die Datei sonst weiterhin in der Ausgabe anzeigt, wenn er sie sucht.

Wie man locate dazu bringt, die Anzahl der übereinstimmenden Einträge in der Ausgabe auszugeben

Wie wir gesehen haben, gibt der locate-Befehl die Namen der übereinstimmenden Dateien zusammen mit ihren vollständigen oder absoluten Pfaden in der Ausgabe aus. Wenn Sie möchten, können Sie das Tool jedoch dazu bringen, all diese Informationen zu unterdrücken und stattdessen nur die Anzahl der übereinstimmenden Einträge auszugeben. Dies kann mit der Kommandozeilenoption -c erreicht werden.

Wie man locate zwingt, nur die Einträge zu drucken, die existierenden Dateien entsprechen

Wie wir bereits weiter oben in diesem Artikel besprochen haben, zeigt der Befehl den Dateinamen in der Ausgabe an, wenn eine Datei aus dem System entfernt wurde, bis Sie die locate-Datenbank wieder aktualisieren. In diesem speziellen Fall können Sie jedoch die Aktualisierung der Datenbank überspringen und erhalten trotzdem korrekte Ergebnisse in der Ausgabe, wenn Sie die Befehlszeilenoption -e verwenden.

Zum Beispiel habe ich die Datei „filetosearch.txt“ von meinem System entfernt. Dies wurde durch den Befehl find bestätigt, der die Datei nicht mehr suchen konnte:

Aber als ich den gleichen Vorgang mit locate durchführte, wurde die Datei immer noch in der Ausgabe angezeigt:

Und wir wissen warum – weil die Datenbank von locate nicht aktualisiert wurde, nachdem die Datei gelöscht wurde. Die Verwendung der Option -e hat jedoch den Trick gebracht:

Hier ist, was die locate man page über diese Option sagt: „Es werden nur Einträge gedruckt, die sich auf Dateien beziehen, die zum Zeitpunkt der Ausführung von locate existieren.“

Wie man locate dazu bringt, Groß- und Kleinschreibung zu ignorieren

Standardmäßig wird bei der Suche mit dem locate-Befehl die Groß- und Kleinschreibung berücksichtigt. Mit der Befehlszeilenoption -i können Sie das Tool jedoch dazu zwingen, Groß- und Kleinschreibung zu ignorieren.

Beispiel: Ich habe zwei Dateien auf meinem System, die „newfiletosearch.txt“ und „NEWFILETOSEARCH.txt“ heißen. Wie Sie sehen können, sind die Dateinamen gleich, nur die Groß- und Kleinschreibung ist unterschiedlich. Wenn Sie locate auffordern, nach, sagen wir, „*tosearch*“ zu suchen, wird in der Ausgabe nur der Name in Kleinbuchstaben angezeigt:

Bei Verwendung der Befehlszeilenoption -i wird die Groß-/Kleinschreibung jedoch ignoriert, und beide Dateinamen werden in der Ausgabe angezeigt:

Ausgabeeinträge mit ASCII NUL trennen

Standardmäßig werden die Ausgabeeinträge, die der locate-Befehl erzeugt, durch ein Zeilenumbruchzeichen (\n) getrennt. Aber wenn Sie möchten, können Sie das Trennzeichen ändern und das ASCII NUL anstelle eines Zeilenumbruchs verwenden. Dies kann mit der Befehlszeilenoption -0 geschehen:

Ich habe zum Beispiel den gleichen Befehl wie im letzten Abschnitt oben ausgeführt, aber die Befehlszeilenoption -0 hinzugefügt:

Sie können also sehen, dass das Trennzeichen für den Zeilenumbruch nicht mehr vorhanden ist – es wurde durch NUL ersetzt.

Anzeigen von Informationen über die locate-Datenbank

Wenn Sie wissen wollen, welche Datenbank locate verwendet, sowie andere Statistiken über die Datenbank, verwenden Sie die Befehlszeilenoption -S.

Wie man mit locate nach einem exakten Dateinamen sucht

Standardmäßig wird bei der Suche nach einem Dateinamen mit locate der übergebene Name – sagen wir NAME – implizit durch *NAME* ersetzt. Wenn ich zum Beispiel nach einem Dateinamen ‚testfile‘ suche, dann werden alle Namen, die mit *testfile* übereinstimmen, in der Ausgabe ausgegeben:

Was aber, wenn die Anforderung darin besteht, Dateien zu suchen, deren Namen genau mit ‚testfile‘ übereinstimmen? Nun, in diesem Fall müssen Sie reguläre Ausdrücke verwenden, die mit der Befehlszeilenoption -r aktiviert werden können. So können Sie mit regulären Ausdrücken nach „testfile“ suchen:

locate -r /testfile$

Wenn Sie sich mit regulären Ausdrücken noch nicht auskennen, lesen Sie hier weiter.

Abschluss

Locate bietet noch viele weitere Optionen, aber die hier besprochenen sollten ausreichen, um Ihnen einen Überblick über das Kommandozeilenprogramm zu geben und Ihnen den Einstieg zu erleichtern. Wir raten Ihnen, zunächst alle hier beschriebenen Optionen auf Ihrem Linux-Rechner auszuprobieren und dann auf andere umzusteigen, die Sie in der Manpage des Tools finden können.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.