Linux which, whereis, locate: Dateien suchen und den Pfad von Befehlen finden

Manchmal willst du httpd.conf bearbeiten und weißt nicht, wo die Datei liegt, oder ein Befehl gleichen Namens liegt an zwei Stellen und es ist unklar, welcher ausgeführt wird. Der Linux-Befehl which findet die Datei, die tatsächlich läuft, der Linux-Befehl whereis findet Programm, Konfigurationsordner und Handbuch, und der Befehl locate findet jeden Pfad, der den Namen enthält. Die Unterschiede der drei Befehle stehen in einer Tabelle, und auf einem virtuellen Server im Browser kannst du sie selbst ausprobieren.
Unter AlmaLinux 9.8 steckt which im Paket which 2.21 und whereis in util-linux 2.37.4, beide sind also sofort nutzbar; für locate musst du das Paket mlocate 0.26 separat installieren.
✅ Unterschiede zwischen which · whereis · locate
Die drei Befehle suchen an verschiedenen Stellen. which und whereis durchsuchen feste Ordner direkt vor Ort, locate sucht Namen in einer vorab erstellten Dateiliste (DB).
| Befehl | Was er findet | Wo er sucht | Neue Dateien |
|---|---|---|---|
| which | Die eine ausgeführte Befehlsdatei, dazu Aliase | Im PATH eingetragene Ordner | Sofort gefunden |
| whereis | Programm · Konfigurationsordner · Handbuch | Feste Ordner wie /usr/bin · /etc · /usr/share/man | Sofort gefunden |
| locate | Alle Dateien und Ordner, die den Namen enthalten | Vorab erstellte DB (/var/lib/mlocate/mlocate.db) | Erst nach updatedb gefunden |
Suchst du dasselbe httpd mit which und whereis, siehst du den Unterschied sofort.
~]# which httpd
/usr/sbin/httpd
~]# whereis httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd /usr/share/man/man8/httpd.8.gzlocate zeigt jeden Pfad, auf den auch nur ein Teil des Namens passt; tippst du [locate httpd.conf], erscheinen neben der Konfigurationsdatei auch das Handbuch (httpd.conf.5.gz) und gesicherte Kopien.
Wählst du auf dem virtuellen Server unten links which, whereis oder locate, wechseln die Chips, und ein Klick auf einen Chip gibt den Befehl ein. Du kannst ihn auch mit der Tastatur tippen.
Um Dateien nicht nach Namen, sondern nach Größe oder Änderungsdatum zu suchen, nutzt du den find-Befehl; den Pfad des Ordners, in dem du gerade bist, zeigt der pwd-Befehl.
✅ Der Linux-Befehl which
which durchsucht die Ordner im PATH der Reihe nach von vorn und zeigt die erste ausführbare Datei, die es findet. Genau diese Datei läuft, wenn du den Befehl tippst.
Unter AlmaLinux gibt die bash die Aliasliste an which weiter; bei einem Befehl mit Alias erscheinen deshalb Alias und echte Datei zusammen. Liegt er nirgends im PATH, erscheint [no Befehl in (PATH)].
~]# which ll
alias ll='ls -l --color=auto'
/usr/bin/ls
~]# which htop
/usr/bin/which: no htop in (/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)Praktisch gibt es nur die Option -a. Liegt derselbe Name in zwei Ordnern des PATH, zeigt sie beide, und der oberste wird tatsächlich ausgeführt.
~]# which ping
/usr/sbin/ping
~]# which -a ping
/usr/sbin/ping
/usr/bin/pingUnter AlmaLinux 9.8 ist /usr/sbin/ping ein Link auf /usr/bin/ping, das Ergebnis ist also dasselbe. Ein selbst installiertes Programm in /usr/local/bin läuft wegen der PATH-Reihenfolge vor dem in /usr/bin.
[which cd] zeigt /usr/bin/cd, doch tippst du cd in der Shell, läuft nicht diese Datei, sondern der eingebaute Shell-Befehl. Ob ein Befehl eingebaut ist, prüfst du mit [type cd]; dann erscheint [cd is a shell builtin].
✅ Der Linux-Befehl whereis
whereis sucht anhand des Befehlsnamens Programm und Handbuch zusammen. Es ignoriert den PATH und durchsucht feste Ordner wie /usr/bin · /usr/sbin · /usr/lib64 · /etc · /usr/share, daher erscheint auch ein gleichnamiger Konfigurationsordner (/etc/httpd).
| Option | Beschreibung | |
|---|---|---|
| -b | Nur Programme. Bei httpd /usr/sbin/httpd sowie /usr/lib64/httpd · /etc/httpd · /usr/share/httpd | |
| -m | Nur Handbücher (/usr/share/man · /usr/share/info) | |
| -s | Nur Quellen. Bei einer Standardinstallation von AlmaLinux 9.8 erscheint nur der Name, etwa [httpd:] | |
| -l | Liste der Ordner, die whereis durchsucht |
~]# whereis -b httpd
httpd: /usr/sbin/httpd /usr/lib64/httpd /etc/httpd /usr/share/httpd
~]# whereis -m httpd
httpd: /usr/share/man/man8/httpd.8.gz
~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1ossl.gz /usr/share/man/man1/passwd.1.gzFindet es nichts, erscheint nur der Name, etwa [htop:]. which gibt bei einem Fehlschlag den Exit-Code 1 zurück, whereis dagegen 0; um in einem Skript zu prüfen, ob etwas installiert ist, nimmst du deshalb which.
✅ Der Linux-Befehl locate
locate durchsucht nicht die Festplatte, sondern sucht Namen in einer vorab erstellten DB. Das ist schnell, findet aber keine Dateien, die nach dem Erstellen der DB entstanden sind.
~]# dnf -y install mlocate
~]# updatedbTippst du es direkt nach der Installation, gibt es noch keine DB, und es erscheint [locate: can not stat () `/var/lib/mlocate/mlocate.db’: No such file or directory]; ein einmaliges updatedb legt sie an. Danach baut mlocate-updatedb.timer die DB einmal täglich neu auf.
Eine neu angelegte Datei erscheint erst nach updatedb, und eine gelöschte Datei erscheint bis dahin weiter. Um nur die jetzt vorhandenen Dateien zu sehen, hängst du -e an.
~]# touch report.txt
~]# locate report.txt
~]# updatedb
~]# locate report.txt
/root/work/report.txt
~]# rm -f report.txt
~]# locate report.txt
/root/work/report.txt
~]# locate -e report.txtPRUNEPATHS in /etc/updatedb.conf enthält /tmp · /var/tmp · /mnt · /media, deshalb erscheinen Dateien aus diesen Ordnern auch nach updatedb nicht.
🔲 Optionen des Befehls locate
| Option | Beschreibung | |
|---|---|---|
| -i | Groß-/Kleinschreibung ignorieren | |
| -c | Statt der Pfade nur die Anzahl der Treffer | |
| -l= -n | Mit einer Zahl dahinter nur so viele Treffer. -l 3 | |
| -b | Nur im Dateinamen am Ende des Pfads suchen | |
| -e | Dateien weglassen, die in der DB stehen, aber nicht mehr existieren | |
| -S | DB-Infos (Ordner · Dateien · Größe) | |
| -r | Mit regulärem Ausdruck suchen. locate -r “httpd.conf$” |
ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.