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
| Option | Zweck | Beispiel |
|---|---|---|
-i | Ignoriert Groß- und Kleinschreibung. | locate -i 'handbuch.pdf' |
-n ANZAHL | Begrenzt die Zahl der ausgegebenen Treffer. | locate -n 10 'log' |
-c | Gibt nur die Anzahl passender Datenbankeinträge aus. | locate -c 'bashrc' |
-e | Beschrä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 Optionen | Einzelne 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.
| Merkmal | locate | find |
|---|---|---|
| Suchquelle | Vorbereitete Dateinamen-Datenbank | Direkte Suche im Dateisystem |
| Geschwindigkeit | Meist sehr schnell, auch systemweit | Kann bei großen Verzeichnisbäumen deutlich länger dauern |
| Aktualität der Ergebnisse | Abhängig von der letzten Datenbankaktualisierung | Bezieht den aktuellen Dateisystembestand ein |
| Suchkriterien | Vor allem Namen und Pfade | Namen, Typ, Eigentümer, Berechtigungen, Größe, Zeiten und weitere Kriterien |
| Typische Einsatzfälle | Schnell herausfinden, wo ein bestimmter Name vorkommt | Aktuelle oder komplexe Suche mit genau definierten Bedingungen |
| Neue oder gelöschte Dateien | Neue Dateien können fehlen; gelöschte Dateien können noch erscheinen | Aktuelle 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
locatekeinen erwarteten Treffer liefert, prüfe zunächst die Datenbank und wechsle bei Bedarf zufind.
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.
updatedbkonnte 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
- Suche zunächst schnell nach dem Namen oder Namensbestandteil:
locate SUCHMUSTER. - Begrenze eine große Ausgabe mit
-noder verschaffe dir mit-czuerst einen Überblick. - Wenn erwartete neue Dateien fehlen, prüfe sie mit
lsoder einer aktuellenfind-Suche. - Prüfe den Aktualisierungsstand und führe, sofern zulässig,
sudo updatedbaus. - Wechsle zu
find, wenn aktuelle Metadaten oder komplexe Kriterien erforderlich sind. - Prüfe wichtige Treffer mit
ls,statoder einem aktuellenfind-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.