Der Befehl which findet den Speicherort einer ausführbaren Datei (Befehl), indem er in den Verzeichnissen sucht, die in der Umgebungsvariable PATH aufgelistet sind.

Was ist PATH?

PATH ist eine Umgebungsvariable, die der Shell und anderen Programmen mitteilt, in welchen Verzeichnissen sie nach ausführbaren Dateien suchen sollen. Sie besteht aus einer Liste von durch Doppelpunkte getrennten absoluten Pfaden zu Verzeichnissen, die die ausführbaren Dateien enthalten.

Um den Inhalt deiner PATH-Variable einzusehen, verwende den Befehl echo mit $PATH als Argument:

echo $PATH

Die Ausgabe sieht etwa so aus:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Wie benutzt man den Befehl which?

Die Syntax für den which-Befehl lautet wie folgt:

which [OPTIONEN] DATEINAME...

Wenn du zum Beispiel den vollständigen Pfad des ping-Befehls finden möchtest, gib Folgendes ein:

which ping

Die Ausgabe sieht dann etwa so aus:

/bin/ping

Du kannst dem which-Befehl auch mehrere Argumente geben:

which netcat uptime

Die Ausgabe enthält die vollständigen Pfade zu den ausführbaren Dateien von sowohl netcat als auch uptime:

/bin/netcat
/usr/bin/uptime

Die Suche erfolgt von links nach rechts. Wenn in den Verzeichnissen, die in der PATH-Umgebungsvariable aufgelistet sind, mehrere Treffer gefunden werden, gibt which nur den ersten aus. Wenn du alle Übereinstimmungen ausgeben möchtest, verwende die Option -a:

which -a touch

Die Ausgabe zeigt die vollständigen Pfade zu beiden touch-Befehlen:

/usr/bin/touch
/bin/touch

Normalerweise handelt es sich bei einer der ausführbaren Dateien nur um einen Symlink auf die andere. In manchen Fällen kann es jedoch vorkommen, dass du zwei Versionen desselben Befehls an verschiedenen Orten installiert hast oder völlig unterschiedliche Befehle mit demselben Namen.

Zusammenfassung

Der which-Befehl wird verwendet, um den Ort einer ausführbaren Datei zu finden, indem er in den Verzeichnissen sucht, die in der PATH-Umgebungsvariable aufgeführt sind.