Linux-Tutorial / Dateien und Befehle mit find, locate, which und whereis finden
Verwenden Sie find, um den aktuellen Verzeichnisbaum nach Bedingungen zu durchsuchen, und locate, um eine vorab erstellte Dateinamensdatenbank schnell zu durchsuchen. which und whereis helfen dabei, befehlsbezogene Dateien zu finden, aber Bashs type oder command -v ist besser, wenn Sie wissen müssen, wie Ihre aktuelle Shell einen Befehlsnamen auflöst, einschließlich Aliases oder Funktionen. Diese Lektion trennt diese verschiedenen Fragen.
Unterscheiden Sie eine Suche nach Pfaden von einer Suche innerhalb von Dateiinhalt. Verwenden Sie die Lektion zum Filtern und Zählen von Text für das Abgleichen von Zeilen.
Durchsuchen Sie das aktuelle Dateisystem mit find
find durchläuft einen Verzeichnisbaum von einem Startpunkt aus und wählt Einträge nach Name, Typ, Größe oder anderen Tests aus. Die folgende Praxis geht von Bash und GNU find aus. Wenn ~/linux-course-11-practice bereits existiert, wählen Sie einen anderen Namen. Stoppen Sie, wenn der erste mkdir fehlschlägt, anstatt in einem bestehenden Verzeichnis fortzufahren.
mkdir ~/linux-course-11-practice cd ~/linux-course-11-practice mkdir drafts archive touch drafts/notes.txt drafts/todo.md archive/old.txt
Überprüfen Sie Ihren Standort mit pwd und suchen Sie dann nach regulären Dateien, deren Namen auf .txt enden. Anführungszeichen verhindern, dass die Shell *.txt erweitert, bevor find es erhält. GNU -maxdepth 2 beschränkt die Suche auf zwei Ebenen ab dem Startpunkt.
pwd find . -maxdepth 2 -type f -name '*.txt'
Die Reihenfolge kann je nach Dateisystem unterschiedlich sein, aber beide Pfade sollten erscheinen:
./drafts/notes.txt ./archive/old.txt
-type f wählt reguläre Dateien aus, und -name stimmt mit dem Namensmuster überein. GNU find -iname führt einen nicht auf Groß-/Kleinschreibung achtenden Namensabgleich durch. Auf einem echten System kann ein nicht lesbares Verzeichnis einen Berechtigungsfehler erzeugen; ein übereinstimmender Pfad beweist für sich genommen nicht, dass Sie den Inhalt der Datei lesen können.
Durchsuchen Sie eine Dateinamensdatenbank mit locate
locate durchsucht jetzt eine vorab erstellte Dateinamensdatenbank, anstatt den Baum zu durchlaufen. Wenn eine Datenbank verfügbar ist, kann dies über eine große Fläche schnell sein, aber seit der letzten Aktualisierung erstellte Dateien können fehlen und gelöschte Namen können vorübergehend bestehen bleiben. Wie unzugängliche Pfade gehandhabt werden, hängt ebenfalls von der Implementierung und Konfiguration ab.
locate hosts
Die Ergebnisse können /etc/hosts zusammen mit anderen Pfaden enthalten. Wenn locate oder dessen Datenbank fehlt, konsultieren Sie die auf Ihrer Distribution installierten Werkzeuge und das Verfahren zum Aktualisieren des Indexes. GNU Findutils stellt updatedb bereit, aber deren Zeitplan und Berechtigungen sind systemabhängig. Überprüfen Sie, dass ein Ergebnis jetzt mit find oder ls existiert, bevor Sie handeln.
Den Pfad einer ausführbaren Datei finden
which durchsucht in der Regel die in der Umgebungsvariable PATH aufgelisteten ausführbaren Pfade. Der folgende Befehl kann einen Pfad wie /usr/bin/ls oder /bin/ls anzeigen; das Ergebnis variiert je nach System.
which ls
Implementierungen von which unterscheiden sich. Gehen Sie nicht davon aus, dass es alle Aliase oder Funktionen berücksichtigt, die den Namen in Ihrer Shell abfangen könnten. In Bash beschreiben diese Befehle direkter, wie die aktuelle Shell ihn auflöst:
type -a ls command -v ls
type -a kann Aliase, Funktionen, eingebaute Befehle und ausführbare Kandidaten desselben Namens anzeigen. command -v ist nützlich, um zu prüfen, ob ein Name auflösbar ist. Die genaue Ausgabe hängt von Ihrer Shell-Konfiguration ab.
Untersuchen Sie Binär- und Manual-Standorte mit whereis
whereis meldet Orte, die mit einem Befehlsnamen verbunden sind, einschließlich Binärdateien, Quellcode und Handbuchseiten. whereis ls kann sowohl einen Binär- als auch einen Handbuchpfad anzeigen. Nicht jede Art von Element muss installiert sein, und die Suchorte hängen von der Implementierung und der Einrichtung ab.
whereis ls
| Frage | Anfangen mit | Vorsicht |
|---|---|---|
| Welche aktuellen Dateien erfüllen die Bedingungen? | find |
Umfang und Berechtigungen beeinflussen Zeit und Fehler |
| Welche Dateinamen sind in der Datenbank? | locate |
Die Datenbank kann veraltet sein |
| Wo befindet sich eine PATH ausführbare Datei? | which |
Nicht dasselbe wie die vollständige Shell-Auflösung |
| Wie wird diese Shell einen Namen auflösen? | type -a, command -v |
Hängt von den aktuellen Einstellungen der Shell ab |
| Wo befinden sich die Binärdateien oder Handbuchdateien eines Befehls? | whereis |
Die Ergebnisse hängen von der Umgebung ab |
Das Suchen nach einer Datei und das Auflösen eines Befehlsnamens sind unterschiedliche Aufgaben. Eine Datei namens ls mit find zu finden, beweist nicht, dass sie die Datei ist, die ausgeführt wird, wenn man ls eingibt. Überprüfen Sie type -a ls, wenn diese Unterscheidung wichtig ist.
Unter Ubuntu 26.04 installieren Sie einen fehlenden locate-Befehl mit sudo apt install plocate und erstellen dann den Index mit sudo updatedb. Unter Rocky Linux 9 fragen Sie zunächst aktivierte Repositories mit dnf provides '*/locate' ab und installieren das tatsächlich zurückgegebene Paket. Die Indexierung durchsucht das System: Verwenden Sie die Übungs-VM und berücksichtigen Sie Ausschlüsse, Berechtigungen und das Alter des Index.
Offizielle Dokumentation
Lesen Sie das GNU Findutils-Handbuch für find und locate sowie die GNU Bash Built-ins-Dokumentation für type und command. Überprüfen Sie man whereis auf Ihrem System auf die Optionen der installierten Implementierung.




