VMware ESXi and vSphere Cluster Management
Linux whereis-Befehl: Programme, Manpages und Quelldateien finden
Lernen Sie, wie whereis unter Linux Programmdateien, Manpages und Quelldateien findet, welche Optionen wichtig sind und wie sich whereis von which, type, find und locate unterscheidet.
whereis ist ein Linux-Befehl, mit dem Sie typische Dateien zu einem Programmnamen finden. Dazu gehören vor allem ausführbare Programmdateien, lokale Manual-Seiten und gegebenenfalls Quelldateien.
Der Befehl eignet sich besonders für eine schnelle Orientierung: Wo liegt ein Kommando? Gibt es dafür eine Manpage? Sind lokale Quellen vorhanden?
Grundsyntax von whereis
whereis [Optionen] Programmname
Ein einfacher Aufruf sieht beispielsweise so aus:
whereis ls
Die Ausgabe beginnt mit dem gesuchten Namen. Danach folgen die gefundenen Pfade, zum Beispiel ein Pfad zur Binärdatei und ein Pfad zur Manpage. Das konkrete Ergebnis hängt von der Linux-Distribution, den installierten Paketen und der lokalen Suchpfad-Konfiguration ab.
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
Mehrere Programmnamen können in einem Aufruf angegeben werden:
whereis ssh systemctl python3
Für jeden Namen erzeugt whereis eine eigene Ergebniszeile.
Welche Dateien findet whereis?
Binärdateien
Eine Binärdatei ist hier eine ausführbare Programmdatei, etwa ein Kommando unter /usr/bin oder /bin. Die Option -b beschränkt die Ausgabe auf solche Dateien.
whereis -b bash
Manpages
Eine Manpage ist eine lokal installierte Handbuchseite zu einem Kommando, einer Systemfunktion oder einem anderen Thema. Manpages können komprimiert gespeichert sein, zum Beispiel mit der Endung .gz. Mit -m suchen Sie ausschließlich nach Manual-Seiten.
whereis -m grep
Quelldateien
Quelldateien enthalten den Programmquellcode. Sie sind auf vielen produktiven Systemen nicht installiert. Die Option -s beschränkt die Suche auf solche Dateien.
whereis -s PROGRAMM
Mehrere Kategorien lassen sich kombinieren:
whereis -b -m bash
Konfigurationsdateien gehören nicht zur primären Suchkategorie von whereis. Für eine Konfigurationsdatei müssen Sie meist den Paketinhalt, die Dokumentation oder Werkzeuge wie find verwenden.
Standardverzeichnisse und Suchverhalten
whereis verwendet getrennte Suchpfade für Binärdateien, Manpages und Quelldateien. Diese Pfade enthalten typischerweise Verzeichnisse wie /bin, /usr/bin, /usr/share/man oder weitere systemabhängige Verzeichnisse.
Die Suche ist daher anders als eine rekursive Suche mit find. whereis liest nicht jeden Ordner des Dateisystems und sucht nicht nach beliebigen Dateiinhalten. Eine Installation unter /opt, /usr/local, in einem Benutzerverzeichnis oder in einer versionsverwalteten Laufzeitumgebung kann deshalb außerhalb seiner Standardpfade liegen.
Mit -l lassen sich die von whereis verwendeten Suchpfade anzeigen:
whereis -l
Die Ausgabe hilft zu erklären, warum ein vorhandenes Programm möglicherweise nicht gefunden wird.
Wichtige Optionen von whereis
| Option | Funktion | Beispiel |
|---|---|---|
-b | Nur Binärdateien suchen | whereis -b bash |
-m | Nur Manpages suchen | whereis -m grep |
-s | Nur Quelldateien suchen | whereis -s PROGRAMM |
-u | Ungewöhnliche Einträge anzeigen: Ein Dateityp fehlt oder es gibt mehr als einen Treffer | whereis -u PROGRAMM |
-l | Verwendete Standard-Suchpfade anzeigen | whereis -l |
-B | Eigene Verzeichnisse für Binärdateien festlegen | whereis -B /opt/meine-tools/bin -f meinprogramm |
-M | Eigene Verzeichnisse für Manpages festlegen | whereis -M /opt/man -f meinprogramm |
-S | Eigene Verzeichnisse für Quelldateien festlegen | whereis -S /opt/src -f meinprogramm |
-f | Beendet die Liste eigener Suchverzeichnisse; danach folgen die Programmnamen | whereis -B /opt/bin -f meinprogramm |
Eigene Suchpfade mit -B, -M und -S
Mit -B geben Sie eigene Binärverzeichnisse vor, mit -M eigene Verzeichnisse für Manpages und mit -S eigene Quellverzeichnisse. Nach den Verzeichnissen muss -f stehen. Dadurch erkennt whereis, dass anschließend die zu suchenden Programmnamen beginnen.
whereis -B /opt/meine-tools/bin -f meinprogramm
Mehrere Verzeichnisse können angegeben werden:
whereis -B /opt/bin /usr/local/bin -f meinprogramm
Diese Optionen ersetzen für die jeweilige Kategorie die üblichen Suchpfade. Prüfen Sie die lokale Manpage, wenn Sie komplexere Kombinationen verwenden:
man whereis
Die Option -u verstehen
-u steht für eine Suche nach ungewöhnlichen Ergebnissen. whereis gibt dabei Namen aus, bei denen ein bestimmter Dateityp fehlt oder mehr als ein Treffer vorhanden ist. Das kann helfen, Installationen mit fehlender Dokumentation oder mehreren Programmvarianten zu erkennen.
Die genaue Interpretation hängt davon ab, welche Kategorien und Suchpfade für den Aufruf gelten. Für eine normale Suche nach vorhandenen Pfaden ist -u normalerweise nicht erforderlich.
Praktische Beispiele
Programm und Manpage prüfen
whereis ls
Je nach System kann die Ausgabe einen oder mehrere Pfade zur Programmdatei sowie eine komprimierte oder unkomprimierte Manpage enthalten.
netstat untersuchen
whereis netstat
Auf vielen aktuellen Distributionen ist netstat nicht standardmäßig installiert. Dann erscheint möglicherweise nur der gesuchte Name ohne Pfad. Ist das Paket vorhanden, können Programm- und Manpage-Pfade ausgegeben werden.
Mehrere Kommandos vergleichen
whereis ssh systemctl python3
Jede Zeile gehört zu genau einem Programmnamen. So können Sie schnell feststellen, welche Komponenten eines Systems lokal vorhanden sind.
Eine gefundene Manpage öffnen
whereis grep
man grep
Der Pfad aus whereis zeigt, dass eine lokale Manual-Seite vorhanden sein kann. Zum Lesen verwenden Sie normalerweise man PROGRAMM; den konkreten Dateipfad müssen Sie meist nicht direkt angeben.
Den tatsächlichen Dateityp prüfen
file /usr/bin/grep
file ergänzt whereis: Es bestimmt den technischen Typ eines konkreten Pfads, etwa eine ELF-Binärdatei, ein Skript oder einen symbolischen Link.
Gefundene Pfade richtig interpretieren
Ein gefundener Pfad ist ein Ausgangspunkt für weitere Prüfungen. Sie können beispielsweise mit file den Dateityp bestimmen oder mit readlink -f das endgültige Ziel eines symbolischen Links ermitteln:
readlink -f /usr/bin/grep
file /usr/bin/grep
Der angezeigte Pfad muss nicht die letztliche Programmdatei sein. Ein symbolischer Link ist ein Dateisystemverweis auf einen anderen Pfad. Außerdem können Distributionen alternative Paketlayouts verwenden. Ein erwarteter Pfad wie /bin/PROGRAMM kann deshalb beispielsweise auf /usr/bin/PROGRAMM zeigen oder dort direkt liegen.
Was bedeutet eine Ausgabe ohne Treffer?
Wenn hinter dem Programmnamen kein Pfad erscheint, bedeutet das zunächst nur, dass whereis in seinen aktuellen Suchpfaden keinen passenden Treffer gefunden hat. Mögliche Ursachen sind:
- Das Programm ist nicht installiert.
- Die Manpage oder die Quelldateien sind nicht installiert.
- Das Programm liegt in einem von whereis nicht berücksichtigten Verzeichnis.
- Der verwendete Name stimmt nicht mit dem tatsächlichen Dateinamen überein.
- Die Shell verwendet einen Alias, eine Funktion oder ein Built-in statt einer gewöhnlichen Programmdatei.
Ein Programm kann also ausführbar sein, ohne dass eine Manpage oder lokaler Quellcode vorhanden ist.
whereis im Vergleich zu ähnlichen Befehlen
| Befehl | Wofür geeignet | Suchbereich oder Datenquelle | Wichtige Einschränkung |
|---|---|---|---|
whereis | Typische Programmdateien, Manpages und Quellen finden | Begrenzte, systemabhängige Standard-Suchpfade | Keine allgemeine rekursive Dateisystemsuche |
which | Das über PATH aufrufbare Kommando ermitteln | Verzeichnisse der Umgebungsvariable PATH | Findet typischerweise nicht Manpages oder Quelldateien |
type | Ermitteln, wie die Shell einen Namen auflöst | Shell-Aliase, Funktionen, Built-ins und Dateipfade | Ergebnis beschreibt die Shell-Auflösung, nicht die allgemeine whereis-Kategorisierung |
find | Beliebige Dateien nach frei wählbaren Kriterien suchen | Frei angegebene Verzeichnisse, rekursiv | Kann bei großen Verzeichnisbäumen langsam oder umfangreich sein |
locate | Dateinamen schnell über eine Datenbank suchen | In der Regel eine zuvor erzeugte Dateinamen-Datenbank | Ergebnisse können veraltet sein oder von der Datenbank abhängen |
file | Den tatsächlichen Typ eines bekannten Pfads bestimmen | Die angegebene Datei | Es sucht keine passenden Pfade |
Troubleshooting
whereis findet ein ausführbares Kommando nicht
Prüfen Sie zuerst, ob die Shell das Kommando über PATH findet:
command -v PROGRAMM
Mit type -a erkennen Sie zusätzlich Aliase, Funktionen, Built-ins und mehrere Dateipfade:
type -a PROGRAMM
Zeigt command -v einen Pfad außerhalb der whereis-Suchpfade, können Sie das passende Verzeichnis ausdrücklich angeben:
whereis -B /usr/local/bin -f PROGRAMM
Die Binärdatei wird gefunden, aber keine Manpage
Dann ist das Programm möglicherweise installiert, während die Dokumentation fehlt. Testen Sie:
man PROGRAMM
PROGRAMM --help
Eine Manpage kann in einem nicht berücksichtigten Verzeichnis liegen oder das Paket bietet überhaupt keine lokale Manpage. Prüfen Sie gegebenenfalls ein separates Dokumentationspaket in Ihrer Paketverwaltung.
Ein Pfad unterscheidet sich von der Erwartung
Verwenden Sie den tatsächlich ausgegebenen Pfad. Bei Bedarf lösen Sie symbolische Links auf und prüfen den technischen Dateityp:
readlink -f PFAD
file PFAD
Insbesondere die Zusammenführung von /bin und /usr/bin oder alternative Paketlayouts kann zu unterschiedlichen, aber korrekten Ergebnissen führen.
Prüfungsrelevante Zusammenfassung
- whereis sucht Programmnamen in festgelegten, typischen Systemverzeichnissen.
- Ohne Einschränkung können Binärdateien, Manpages und Quelldateien erscheinen.
-b,-mund-sbeschränken die Suche auf eine Dateikategorie.-lzeigt die verwendeten Standard-Suchpfade.-B,-Mund-Sdefinieren eigene Suchverzeichnisse;-ftrennt diese von den Programmnamen.-uzeigt ungewöhnliche Ergebnisse mit fehlenden oder mehrfach vorhandenen Kategorien.- whereis ist nicht dasselbe wie
which,type,findoderlocate. - Mit
fileundreadlink -fkönnen gefundene Pfade anschließend genauer geprüft werden.
Eine kompakte Referenz finden Sie auch unter whereis-Befehl.