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

OptionFunktionBeispiel
-bNur Binärdateien suchenwhereis -b bash
-mNur Manpages suchenwhereis -m grep
-sNur Quelldateien suchenwhereis -s PROGRAMM
-uUngewöhnliche Einträge anzeigen: Ein Dateityp fehlt oder es gibt mehr als einen Trefferwhereis -u PROGRAMM
-lVerwendete Standard-Suchpfade anzeigenwhereis -l
-BEigene Verzeichnisse für Binärdateien festlegenwhereis -B /opt/meine-tools/bin -f meinprogramm
-MEigene Verzeichnisse für Manpages festlegenwhereis -M /opt/man -f meinprogramm
-SEigene Verzeichnisse für Quelldateien festlegenwhereis -S /opt/src -f meinprogramm
-fBeendet die Liste eigener Suchverzeichnisse; danach folgen die Programmnamenwhereis -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

BefehlWofür geeignetSuchbereich oder DatenquelleWichtige Einschränkung
whereisTypische Programmdateien, Manpages und Quellen findenBegrenzte, systemabhängige Standard-SuchpfadeKeine allgemeine rekursive Dateisystemsuche
whichDas über PATH aufrufbare Kommando ermittelnVerzeichnisse der Umgebungsvariable PATHFindet typischerweise nicht Manpages oder Quelldateien
typeErmitteln, wie die Shell einen Namen auflöstShell-Aliase, Funktionen, Built-ins und DateipfadeErgebnis beschreibt die Shell-Auflösung, nicht die allgemeine whereis-Kategorisierung
findBeliebige Dateien nach frei wählbaren Kriterien suchenFrei angegebene Verzeichnisse, rekursivKann bei großen Verzeichnisbäumen langsam oder umfangreich sein
locateDateinamen schnell über eine Datenbank suchenIn der Regel eine zuvor erzeugte Dateinamen-DatenbankErgebnisse können veraltet sein oder von der Datenbank abhängen
fileDen tatsächlichen Typ eines bekannten Pfads bestimmenDie angegebene DateiEs 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, -m und -s beschränken die Suche auf eine Dateikategorie.
  • -l zeigt die verwendeten Standard-Suchpfade.
  • -B, -M und -S definieren eigene Suchverzeichnisse; -f trennt diese von den Programmnamen.
  • -u zeigt ungewöhnliche Ergebnisse mit fehlenden oder mehrfach vorhandenen Kategorien.
  • whereis ist nicht dasselbe wie which, type, find oder locate.
  • Mit file und readlink -f können gefundene Pfade anschließend genauer geprüft werden.

Eine kompakte Referenz finden Sie auch unter whereis-Befehl.