whereis hat einen anderen Auftrag als which und type: Es sucht nicht nur nach der ausführbaren Datei, sondern auch nach Quellcode und Manpages. Außerdem nutzt es eine eigene, hartkodierte Pfadliste statt $PATH — was sehr praktisch sein kann oder zu Überraschungen führt, je nachdem, wo deine Programme installiert sind.
Was whereis macht
Standardmäßig sucht whereis nach drei Quellen gleichzeitig: Binary, Manpage und Source. Die Ausgabe ist eine einzige Zeile pro Programm.
whereis git
whereis lsgit: /usr/bin/git /usr/share/man/man1/git.1.gz
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gzSource-Dateien tauchen nur auf, wenn auch Source installiert ist (typischerweise via apt install programmname-src oder Distro-Äquivalent). Auf einem normalen Desktop-System bleibt die Source-Spalte daher meistens leer.
Optionen
-b Sucht nur nach dem Binary.
-m Sucht nur nach der Manpage.
-s Sucht nur nach den Source-Dateien.
-u Zeigt nur Einträge, denen mindestens eine der drei Kategorien fehlt — praktisch, um unvollständige Installationen zu finden.
-l Listet die kompletten Suchpfade auf, in denen whereis schaut.
-B / -M / -S Begrenzen die Suche für Binaries, Manpages bzw. Sources auf eigene Verzeichnisse (gefolgt von -f).
whereis -m grepgrep: /usr/share/man/man1/grep.1.gzEigene Pfadliste statt $PATH
Anders als which durchsucht whereis nicht $PATH, sondern eine im Programm hartkodierte Liste — typischerweise /usr/bin, /usr/sbin, /usr/local/bin, /usr/share/man, /usr/X11R6/man und einige mehr. Die vollständige Liste zeigt whereis -l.
Die Konsequenz: Wenn du eine Binary in einem ungewöhnlichen Verzeichnis hast — /opt/firma/bin oder ~/.local/bin — und es zu deinem $PATH hinzugefügt hast, findet which sie problemlos, whereis aber nicht. Manche Distros lesen zusätzlich /etc/whereis.conf ein, falls vorhanden, aber darauf solltest du dich nicht verlassen.
Vergleich zu which und type
| Werkzeug | Sucht in | Findet zusätzlich |
|---|---|---|
which | $PATH | nur Binaries |
type | volle Auflösungskette | Aliases, Funktionen, Builtins |
whereis | hartkodierte Pfade | Manpages, Quellcode |
whereis ist die richtige Wahl, wenn du gleichzeitig die Manpage finden willst — etwa um in einem Skript automatisch Doku-Pfade zu sammeln. Für reine Programmlokalisierung sind type und command -v ehrlicher.
Besonderheiten
Andere Pfadliste als which
Weil whereis nicht $PATH nutzt, kann das Ergebnis von which abweichen. Ein Tool in /opt/foo/bin mit /opt/foo/bin im $PATH wird von which gefunden, von whereis aber ignoriert. Mit whereis -l siehst du, in welchen Pfaden whereis tatsaechlich sucht.
Manpages an unerwarteten Orten
Die Manpage-Pfadliste umfasst neben /usr/share/man auch /usr/local/share/man, /usr/X11R6/man und Ähnliche. Wer Manpages selbst installiert (etwa unter ~/.local/share/man), wird von whereis nicht erfasst — man selbst durchsucht hingegen $MANPATH und manpath-Konfigurationsdateien.
Aliases und Funktionen sind unsichtbar
whereis schaut nur ins Dateisystem. Aliases, Shell-Funktionen und Builtins existieren ausschließlich im Speicher der laufenden Shell und tauchen daher nicht auf. Wenn du wissen willst, was tatsaechlich ausgeführt wird, ist type das richtige Werkzeug.
Source-Findung nur bei installierter Source
Die -s-Option findet Quellcode nur, wenn er auch im Dateisystem liegt — auf einem Standard-Server-Setup also so gut wie nie. Erst nach apt source paket oder apt install paket-src (Distro-spezifisch) tauchen Source-Pfade auf. Auf produktiven Systemen erwartet man von -s daher meistens leere Ergebnisse.
-u findet unvollständige Installationen
whereis -u -m -b * zeigt alle Programme im aktuellen Verzeichnis, denen entweder Binary oder Manpage fehlt. Praktisch, um Pakete zu finden, die ohne Doku installiert wurden — manche minimalen Container-Images strippen Manpages aus Platzgruenden.
Weiterführende Ressourcen
Externe Quellen
- whereis(1) — Linux Manpage — Manpage mit allen Optionen und Pfaden
- util-linux — Quellcode des
whereis-Pakets - man-db Documentation — Wie Manpages auf einem Linux-System organisiert sind
Verwandte Artikel
- Linux which — Sucht nur in
$PATH - Linux type — Volle Auflösungskette in Bash
- Linux command — POSIX-Standard für Skripte
- Manpages — Hilfeseiten direkt im Terminal
- Linux PATH — Was
$PATHist und was nicht