Linux / Befehl which: Ausführbare Dateien im PATH finden

Der which Befehl durchsucht Verzeichnisse, die in PATH aufgelistet sind, und gibt einen passenden ausführbaren Pfad aus. Er ist praktisch, um ein externes Programm zu finden, aber Shell-Aliase, Funktionen und eingebaute Befehle werden besser mit type oder command -v diagnostiziert.

Ergänzende Befehle und Anwendungsfälle finden Sie in Essenzielle Linux-Befehle: Ein praktisches Nachschlagewerk nach Aufgabe.

Was ist der which-Befehl?

Eine typische Implementierung prüft PATH von links nach rechts und meldet die erste ausführbare Datei. Allerdings kann which ein externes Programm oder ein shellspezifisches Wrapper-Programm sein, sodass seine Optionen und der Umgang mit Aliases variieren können. Seine Ausgabe ist nicht immer identisch mit dem, was die aktuelle Shell ausführen wird.

Grundlegende Syntax

which [OPTION]... COMMAND...

Optionen und Randfälle können je nach Implementierung und Version variieren. Überprüfen Sie which --help und man which auf dem Zielsystem, bevor Sie sich auf implementierungsspezifisches Verhalten verlassen.

Grundlegende Verwendung von which

Einen ausführbaren Pfad finden

Die erste passende ausführbare Datei im PATH wird ausgegeben.

which python3

Mehrere Befehle prüfen

Geben Sie mehrere Befehlsnamen an, um sie in einem Aufruf zu überprüfen.

which sh awk sed

Alle PATH-Treffer anzeigen

Gängige Implementierungen unterstützen -a für jede passende ausführbare Datei in PATH-Reihenfolge.

which -a python3

Einschränkungen der Ausgabe des Pfads ausführbarer Dateien

which zeigt den Pfad der ausführbaren Datei, die in PATH gefunden wurde. Abhängig vom System und der Shell kann derselbe Befehl an unterschiedlichen Stellen gefunden werden.

which ls

Beispielausgabe:

/usr/bin/ls

Shell-Aliase oder Funktionen können zwischen der which-Ausgabe und der tatsächlichen Interpretation des eingegebenen Befehls unterschiedlich sein. Um zu prüfen, was die aktuelle Shell ausführen wird, verwenden Sie type ls oder command -V ls.

Wichtige Optionen

Option Zweck
-a, --all Alle PATH-Treffer drucken, anstatt nur den ersten.
--skip-alias In einigen GNU-which-Versionen Alias-Behandlung überspringen.
--skip-functions In einigen GNU-which-Versionen Shell-Funktionsbehandlung überspringen.
--version Die installierte Implementierung und Version identifizieren.

Praktische Beispiele

Befehlspriorität prüfen

Alle Übereinstimmungen mit der Reihenfolge der Verzeichnisse in PATH vergleichen.

which -a python3
printf '%s\n' "$PATH"

Die Shell fragen, was sie auflöst

Diese Shell-Befehle können Aliase, Funktionen, eingebaute Befehle und externe Dateien identifizieren.

type -a ls
command -V ls
command -v ls

Verfügbarkeit in einem Skript testen

Für portablen POSIX-Shell-Code verwenden Sie den Exit-Status von command -v, anstatt die Ausgabe von which zu analysieren.

if command -v curl >/dev/null 2>&1; then
  printf '%s\n' 'curl is available'
fi

which und verwandte Befehle

Befehl Hauptrolle Geeignet für
which Durchsuchen Sie PATH nach externen ausführbaren Dateien Schnelle Pfadabfrage
command -v Shell-Befehlsauflösung melden Portable Skriptprüfungen
type Klassifizieren Sie Aliase, Funktionen, eingebaute Befehle und Dateien Interaktive Diagnose
whereis Programmspezifische Speicherorte durchsuchen Binärdateien, Quelltext und Handbücher

Wichtige Hinweise

Aliase und Funktionen können übersehen werden

Die Shell kann einen Alias oder eine Funktion vor einer externen ausführbaren Datei wählen. Bestätigen Sie mit type.

Implementierungen unterscheiden sich

Gehen Sie nicht davon aus, dass optionale Flags in jeder Umgebung verfügbar sind.

Ein Pfad ist kein Sicherheitsurteil

Das Auffinden einer ausführbaren Datei überprüft nicht ihren Besitzer, ihre Berechtigungen, ihre Integrität oder Vertrauenswürdigkeit.

FAQ

Bedeutet keine Ausgabe, dass der Befehl nicht installiert ist?

Es bedeutet, dass kein ausführbares Programm im PATH gefunden wurde. Der Name könnte immer noch ein Shell-Builtin, eine Funktion oder ein Alias sein.

Wie zeige ich jeden passenden Pfad an?

Verwenden Sie which -a COMMAND, wenn die Implementierung dies unterstützt.

Sollten Skripte which verwenden?

Für portable Shell-Skripte ist command -v im Allgemeinen der bessere Verfügbarkeitstest.

Wie unterscheidet sich whereis?

which durchsucht PATH nach ausführbaren Dateien; whereis durchsucht bekannte Orte nach Binärdateien, Quellcode und Handbuchseiten.

Weitere Angaben zu Syntax, Implementierung und Verfügbarkeit finden Sie unter GNU which Projekt.