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

Affiliate-Hinweis v3.1
Affiliate-Hinweis v3.2 (mobil)
TestumgebungRHEL-FamilieAlmaLinux 9.8root-KontoGeprüft am 2026-10-07
Suchbefehlewhichwhereislocate

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).

BefehlWas er findetWo er suchtNeue Dateien
whichDie eine ausgeführte Befehlsdatei, dazu AliaseIm PATH eingetragene OrdnerSofort gefunden
whereisProgramm · Konfigurationsordner · HandbuchFeste Ordner wie /usr/bin · /etc · /usr/share/manSofort gefunden
locateAlle Dateien und Ordner, die den Namen enthaltenVorab 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.gz

locate 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.

Simulator für Befehle zur DateisucheAlmaLinux 9.8
[root@server work]#
Läuft nur in deinem Browser und berührt keinen echten Server. Wählst du links einen Befehl, wechseln die Chips darunter, und ein Klick auf einen Chip gibt den Befehl ein. Such dasselbe httpd mit allen drei Befehlen und vergleich die Ergebnisse; bei locate legst du eine neue Datei an und suchst vor und nach updatedb. Wenn sich etwas verheddert, drück [Von vorn]; mit uknew help siehst du, welche Befehle es gibt.

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/ping

Unter 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).

OptionBeschreibung
-bNur Programme. Bei httpd /usr/sbin/httpd sowie /usr/lib64/httpd · /etc/httpd · /usr/share/httpd
-mNur Handbücher (/usr/share/man · /usr/share/info)
-sNur Quellen. Bei einer Standardinstallation von AlmaLinux 9.8 erscheint nur der Name, etwa [httpd:]
-lListe 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.gz

Findet 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
~]# updatedb

Tippst 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.txt

PRUNEPATHS 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

OptionBeschreibung
-iGroß-/Kleinschreibung ignorieren
-cStatt der Pfade nur die Anzahl der Treffer
-l= -nMit einer Zahl dahinter nur so viele Treffer. -l 3
-bNur im Dateinamen am Ende des Pfads suchen
-eDateien weglassen, die in der DB stehen, aber nicht mehr existieren
-SDB-Infos (Ordner · Dateien · Größe)
-rMit 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Beweisen Sie, dass Sie ein Mensch sind: 2   +   8   =