VMware ESXi and vSphere Cluster Management

Dateien mit locate suchen

Lerne, wie locate Dateinamen schnell über eine Indexdatenbank sucht, wann updatedb nötig ist und wann find die bessere Wahl ist.

locate ist ein Linux-Kommandozeilenwerkzeug, mit dem du Dateien und Verzeichnisse anhand ihres Namens oder Pfads suchst. Es eignet sich besonders für eine schnelle Suche über viele Verzeichnisse oder über das gesamte System.

Im Gegensatz zu einer direkten Dateisuche durchsucht locate das Dateisystem nicht während der Ausführung. Stattdessen fragt es eine vorbereitete Dateinamen-Datenbank ab. Diese Datenbank enthält bekannte Dateinamen und Pfade und bildet deshalb immer den Stand ihrer letzten erfolgreichen Aktualisierung ab.

Voraussetzungen und Grundidee

Für die Beispiele solltest du ein Terminal öffnen können und grundlegende absolute und relative Pfade kennen. Hilfreich sind außerdem Grundkenntnisse zu ls, Benutzerrechten und sudo.

Ein Index ist eine vorab erzeugte Datenstruktur, die schnelle Suchvorgänge ermöglicht. Bei locate besteht dieser Index im Wesentlichen aus Dateinamen und Pfaden. Die Suche ist schnell, weil nicht jedes Verzeichnis und jede Datei beim Aufruf erneut gelesen werden muss.

Grundsyntax von locate

locate SUCHMUSTER

Das Suchmuster ist meist ein Dateiname oder ein Teil davon:

locate ssh_config

Die Ausgabe enthält typischerweise alle gespeicherten Pfade, in denen das Muster vorkommt. Das Ergebnis kann beispielsweise so aussehen:

/etc/ssh/ssh_config
/usr/share/doc/openssh-client/examples/ssh_config

Mehrere Treffer sind normal. Jeder ausgegebene Pfad ist ein eigener Datenbankeintrag. Du kannst einen passenden Treffer anschließend mit weiteren Befehlen prüfen oder weiterverarbeiten. Bei mehreren gleichnamigen Dateien unterscheidest du sie anhand des vollständigen Pfads.

Beispiel: Nach einem Dateinamen suchen

locate ssh_config

Diese Suche sucht nach dem Namensbestandteil ssh_config. Weil häufig der gesamte gespeicherte Pfad berücksichtigt wird, können auch Verzeichnisse oder Pfade auftauchen, deren Namen das Muster enthalten.

Die locate-Datenbank

Die Datenbank wird nicht bei jedem Suchvorgang automatisch aus dem aktuellen Dateisystem erstellt. Stattdessen erzeugt oder aktualisiert das Werkzeug updatedb den Index:

updatedb

Auf vielen Systemen benötigt die Aktualisierung erhöhte Rechte:

sudo updatedb

Distribution, installierte locate-Variante, Paketkonfiguration und geplante Systemaufgaben bestimmen, wann die Datenbank automatisch aktualisiert wird. Häufig geschieht das beispielsweise täglich oder wöchentlich. Manche Systeme verwenden dafür einen Cron-Auftrag oder einen Systemd-Timer.

Warum neue Dateien zunächst fehlen können

Wenn du eine Datei gerade erstellst oder kopierst, ist sie möglicherweise noch nicht in der Datenbank enthalten. Das erklärt ein leeres Ergebnis:

touch ~/beispiel-neu.txt
locate beispiel-neu.txt

Falls die automatische Aktualisierung noch nicht gelaufen ist, liefert der zweite Befehl eventuell keine Ausgabe. Du kannst die Datenbank anschließend aktualisieren und erneut suchen:

sudo updatedb
locate beispiel-neu.txt

Ob updatedb ohne sudo funktioniert, hängt von der lokalen Konfiguration ab. Die Aktualisierung darf außerdem aus Sicherheits- oder Konfigurationsgründen bestimmte Verzeichnisse ausschließen. Nicht indizierte Bereiche erscheinen dann auch nach einer Aktualisierung nicht in den Ergebnissen.

Nützliche Optionen

OptionZweckBeispiel
-iIgnoriert Groß- und Kleinschreibung.locate -i 'handbuch.pdf'
-n ANZAHLBegrenzt die Zahl der ausgegebenen Treffer.locate -n 10 'log'
-cGibt nur die Anzahl passender Datenbankeinträge aus.locate -c 'bashrc'
-eBeschränkt die Ausgabe auf Pfade, die zum Suchzeitpunkt tatsächlich existieren, sofern die installierte Variante diese Option unterstützt.locate -e 'beispiel-neu.txt'
Implementierungsabhängige OptionenEinzelne Optionen und ihr Verhalten unterscheiden sich beispielsweise zwischen mlocate und plocate.man locate

Groß- und Kleinschreibung ignorieren

locate -i 'handbuch.pdf'

Damit können beispielsweise Handbuch.pdf, handbuch.pdf und andere Schreibweisen gefunden werden, sofern sie in der Datenbank enthalten sind.

Ergebnisliste begrenzen oder zählen

locate -n 10 'log'
locate -c 'bashrc'

-n 10 ist praktisch bei sehr allgemeinen Mustern. Mit -c erhältst du zunächst eine Größenordnung, ohne eine lange Liste auszugeben. Die Zahl bezeichnet Datenbanktreffer und nicht zwingend aktuell vorhandene Dateien.

Nur aktuell vorhandene Pfade anzeigen

locate -e 'beispiel-neu.txt'

Die Option -e prüft, ob ein gespeicherter Pfad zum Zeitpunkt der Suche existiert. Sie ist nicht in jeder Implementierung verfügbar. Prüfe deshalb die lokale Dokumentation mit man locate.

Suchmuster und Shell-Expansion

Ein Suchmuster kann auch Sonderzeichen wie * enthalten. Der Stern steht in vielen Shell-Kontexten für eine beliebige Zeichenfolge. Ohne Anführungszeichen kann die Shell ihn jedoch schon vor dem Start von locate auswerten. Diese automatische Auswertung heißt Shell-Expansion.

Schütze solche Muster deshalb mit einfachen Anführungszeichen:

locate '/etc/*.conf'

So erhält locate das Muster selbst, statt dass die Shell es gegen Dateien im aktuellen Arbeitsverzeichnis auflöst. Das genaue Verhalten von Platzhaltern und zusätzlichen Musteroptionen hängt von der installierten Variante ab. Die maßgebliche Referenz ist daher:

man locate

locate und find im Vergleich

find durchsucht das Dateisystem während der Ausführung. Es arbeitet daher mit dem aktuellen Bestand und kann viele Dateieigenschaften prüfen. Dazu gehören unter anderem Eigentümer, Berechtigungen, Dateityp, Größe und Änderungszeit.

Merkmallocatefind
SuchquelleVorbereitete Dateinamen-DatenbankDirekte Suche im Dateisystem
GeschwindigkeitMeist sehr schnell, auch systemweitKann bei großen Verzeichnisbäumen deutlich länger dauern
Aktualität der ErgebnisseAbhängig von der letzten DatenbankaktualisierungBezieht den aktuellen Dateisystembestand ein
SuchkriterienVor allem Namen und PfadeNamen, Typ, Eigentümer, Berechtigungen, Größe, Zeiten und weitere Kriterien
Typische EinsatzfälleSchnell herausfinden, wo ein bestimmter Name vorkommtAktuelle oder komplexe Suche mit genau definierten Bedingungen
Neue oder gelöschte DateienNeue Dateien können fehlen; gelöschte Dateien können noch erscheinenAktuelle Dateien werden bei der Suche berücksichtigt

Wann welches Werkzeug?

  • Verwende locate, wenn du schnell nach einem Dateinamen oder Namensbestandteil suchen möchtest.
  • Verwende find, wenn das Ergebnis aktuell sein muss.
  • Verwende find, wenn du nach Größe, Dateityp, Eigentümer, Berechtigungen oder Änderungszeit filtern möchtest.
  • Wenn locate keinen erwarteten Treffer liefert, prüfe zunächst die Datenbank und wechsle bei Bedarf zu find.

Aktuelle Suche mit find

find ~ -type f -name 'beispiel-neu.txt'

Dieser Aufruf sucht unterhalb deines Home-Verzeichnisses nach regulären Dateien mit genau diesem Namen. Anders als locate verwendet er nicht den alten Datenbankstand.

Ergebnisqualität und Grenzen

Ein von locate gemeldeter Pfad kann inzwischen gelöscht, verschoben oder umbenannt worden sein. Um einen Treffer zu prüfen, kannst du beispielsweise verwenden:

ls -l /vollstaendiger/pfad/zur/datei
stat /vollstaendiger/pfad/zur/datei

Falls unterstützt, filtert -e nicht mehr vorhandene Pfade:

locate -e 'beispiel-neu.txt'

Ein erwarteter Bereich kann aus mehreren Gründen fehlen:

  • Das Verzeichnis ist von der Datenbankkonfiguration ausgeschlossen.
  • Das Dateisystem war bei der letzten Aktualisierung nicht eingebunden.
  • updatedb konnte den Bereich wegen Berechtigungen oder anderer Fehler nicht lesen.
  • Der aktuelle Ausführungskontext sieht den Bereich nicht, etwa wegen Benutzerrechten oder spezieller Isolation.

Berechtigungen beeinflussen, welche Nutzer Dateien und Verzeichnisse lesen oder durchsuchen dürfen. Die Datenbank kann zwar Einträge enthalten, die du anschließend nicht öffnen kannst. Umgekehrt kann ein Bereich fehlen, wenn er beim Erstellen des Index nicht zugänglich oder ausdrücklich ausgeschlossen war.

Sinnvoller Arbeitsablauf

  1. Suche zunächst schnell nach dem Namen oder Namensbestandteil: locate SUCHMUSTER.
  2. Begrenze eine große Ausgabe mit -n oder verschaffe dir mit -c zuerst einen Überblick.
  3. Wenn erwartete neue Dateien fehlen, prüfe sie mit ls oder einer aktuellen find-Suche.
  4. Prüfe den Aktualisierungsstand und führe, sofern zulässig, sudo updatedb aus.
  5. Wechsle zu find, wenn aktuelle Metadaten oder komplexe Kriterien erforderlich sind.
  6. Prüfe wichtige Treffer mit ls, stat oder einem aktuellen find-Aufruf.

Fehlerbehebung

Eine gerade erstellte Datei wird nicht gefunden

Wahrscheinliche Ursache ist eine veraltete Datenbank.

ls -l ~/beispiel-neu.txt
find ~ -type f -name 'beispiel-neu.txt'
sudo updatedb
locate beispiel-neu.txt

Wenn du keine administrativen Rechte hast, musst du die geplante Aktualisierung abwarten oder einen Administrator um Hilfe bitten. Für eine sofort aktuelle Suche verwendest du find.

locate zeigt einen nicht mehr vorhandenen Pfad

Die Datei wurde wahrscheinlich nach der letzten Aktualisierung gelöscht oder verschoben. Prüfe den Pfad:

ls -l /vollstaendiger/pfad/zur/datei
locate -e 'beispiel-neu.txt'

Aktualisiere die Datenbank bei Bedarf. Wenn sich die Datei an einem anderen Ort befinden könnte, ist eine aktuelle Suche mit find geeigneter.

updatedb meldet einen Berechtigungsfehler

Prüfe die Fehlermeldung und ob du für sudo autorisiert bist:

sudo updatedb

Wenn das nicht erlaubt ist, warte auf die reguläre Aktualisierung oder wende dich an die zuständige Administration. Auch eine lokale Richtlinie kann bestimmte Pfade von der Indexierung ausschließen.

Die Suche liefert zu viele Treffer

locate findet häufig Teilzeichenfolgen im gesamten gespeicherten Pfad. Formuliere das Muster genauer oder begrenze die Ausgabe:

locate -n 10 'log'

Für exakt definierte Kriterien, etwa nur reguläre Dateien mit einer bestimmten Größe, verwendest du find.

Ein erwarteter Systembereich fehlt immer

Prüfe die lokale Dokumentation und Konfiguration von updatedb. Der Bereich kann ausgeschlossen, nicht eingebunden oder wegen Berechtigungen nicht indiziert sein. Teste eine direkte Suche, sofern du auf den Bereich zugreifen darfst:

find /pfad/zum/bereich -name 'SUCHMUSTER'

Änderungen an der Indexkonfiguration sollten nur mit administrativer Freigabe vorgenommen werden.

Dokumentation und Implementierungen

Je nach Linux-System ist beispielsweise mlocate oder plocate installiert. Optionen, Datenbankpfade und Konfigurationsdateien können sich unterscheiden. Verwende deshalb die Handbücher des lokalen Systems:

man locate && man updatedb

Die zentrale Regel bleibt unabhängig von der Variante gleich: locate ist eine schnelle Abfrage eines Dateinamen-Index, während find den aktuellen Dateisystembestand direkt untersucht.

Eine passende Ergänzung ist die Übersicht zur Dateisuche mit locate.