
Linux bietet Nutzern beispiellose Kontrolle über ihre Computerumgebung, von umfangreichen Anpassungsmöglichkeiten bis hin zu detaillierten Systemverwaltungsfunktionen. Unter den zahlreichen verfügbaren Tools which
sticht der Befehl als wichtiges Instrument zur Optimierung Ihrer Kommandozeilenerfahrung hervor. Mit diesem Dienstprogramm können Sie den genauen Speicherort jeder ausführbaren Datei ermitteln, indem Sie die in Ihrer $PATH
Variable angegebenen Verzeichnisse durchsuchen. In dieser umfassenden Anleitung gehen wir auf die Funktionsweise des which
Befehls ein, erläutern seine Syntax und Optionen und liefern praktische Beispiele, um Ihre Kommandozeilenkenntnisse zu verbessern.
Verstehen der Syntax und Funktionalität des „which“-Befehls
Dieser which
Befehl ist Ihr bevorzugtes Werkzeug zum Auffinden der ausführbaren Datei, die einem bestimmten Befehl zugeordnet ist. Er untersucht die in Ihrer Umgebungsvariable PATH angegebenen Verzeichnisse. Er zeigt an, welche Datei bei der Ausführung eines Befehls ausgeführt wird, und liefert basierend auf den Suchergebnissen die entsprechende Ausgabe:
-
0
zeigt an, dass alle angegebenen Befehle gefunden wurden und ausführbar sind. -
1
bedeutet, dass ein oder mehrere Befehle fehlen oder nicht ausführbar sind. -
2
zeigt an, dass eine ungültige Option verwendet wurde.
Die Standardsyntax zum Aufrufen des which
Befehls unter Linux ist unkompliziert:
which [file1] [file2]...
Ersetzen Sie einfach [file1]
und [file2]
durch die Namen der ausführbaren Dateien, die Sie suchen möchten.
Warum den Befehl „which“ verwenden?
Der which
Befehl erfüllt unter Linux mehrere wichtige Funktionen. Er ermöglicht es Benutzern zu überprüfen, ob ein Befehl einer tatsächlichen ausführbaren Datei, einem Alias oder einem symbolischen Link entspricht. Darüber hinaus ermittelt er den genauen Speicherort einer ausführbaren Datei und hilft, fehlende oder widersprüchliche Befehle innerhalb der PATH-Variable zu identifizieren. Die Verwendung von which
garantiert, dass die gewünschte Version eines Befehls auch dann korrekt ausgeführt wird, wenn mehrere Versionen auf Ihrem System vorhanden sind. Dieser Befehl kann Ihre Produktivität deutlich steigern, insbesondere im Umgang mit verschiedenen Tools und Skripten.
Praktische Anwendungen des which-Befehls
Sehen wir uns nun eine Reihe praktischer Beispiele an, um zu veranschaulichen, wie der which
Befehl in realen Szenarien angewendet werden kann:
Beispiel 1: Suchen des Pfads einer ausführbaren Datei
Mit dem folgenden Befehl lässt sich ganz einfach ermitteln, wo sich die ausführbare Datei eines Befehls befindet which
:
which grep

Sie erhalten eine Ausgabe wie „ /usr/bin/grep
“, die den genauen Speicherort der ausführbaren Datei eindeutig angibt.
Beispiel 2: Pfade mehrerer Befehle suchen
Es ist möglich, mehrere Befehle gleichzeitig abzufragen mit dem which
Befehl:
which awk sed cat touch
Dieser Befehl ruft die Pfade für die Befehle awk
, sed
, und cat
ab:

Beispiel 3: Alle Instanzen eines Befehls anzeigen
Standardmäßig which
wird nur das erste Vorkommen im Pfad zurückgegeben. Sie können die -a
Option verwenden, um alle Instanzen eines bestimmten Befehls zu ermitteln:
which -a cat
Dadurch wird eine Liste aller Standorte bereitgestellt, an denen Folgendes cat
gefunden wird:

Um die Details dieser Dateien zu überprüfen, können Sie den ls
Befehl mit der -lh
Option verwenden, festzustellen, ob es sich um tatsächlich ausführbare Dateien oder Duplikate handelt:
ls -lh /usr/bin/cat && ls -lh /bin/cat

Die Ausgabe zeigt die beiden identischen Befehle in unterschiedlichen Verzeichnissen und stellt beide als ausführbare Dateien mit einer Größe von 35 KB dar.
Beispiel 4: Bestätigen der Befehlsexistenz
Überprüfen Sie mit dem folgenden Befehl, ob ein bestimmter Befehl vorhanden ist which
:
which cats

Wenn der Befehl nicht vorhanden ist, wird keine Ausgabe angezeigt und der Beendigungsstatus wird ungleich Null, was auf einen fehlenden Befehl hinweist.
Beispiel 5: Identifizieren symbolischer Links
Wenn auf Ihrem System mehrere Versionen desselben Programms vorhanden sind, handelt es sich bei manchen Instanzen möglicherweise um symbolische Links statt um tatsächliche Binärdateien. Um symbolische Links zu identifizieren, führen Sie den which
Befehl mit der folgenden -a
Option aus:
which -a crontab

Überprüfen Sie als Nächstes die Dateidetails mit dem ls
folgenden Befehl:
ls -lh /usr/bin/crontab && ls -lh /bin/crontab

Wenn in der Ausgabe das Symbol angezeigt ->
wird, handelt es sich bei der Datei um einen symbolischen Link, der auf einen anderen Speicherort verweist.
Beispiel 6: Ausschließen integrierter Shell-Befehle
Der Befehl lässt insbesondere which
Shell-integrierte Befehle aus und zeigt nur externe ausführbare Dateien an, um die Identifizierung des Installationsorts eines Programms zu erleichtern. Beispielsweise gibt zwar ls
einen Pfad zurück, read
tut dies aber als integrierter Befehl nicht:
which ls read

Einschränkungen des „which“-Befehls
Der which
Befehl unterliegt gewissen Einschränkungen, die seine Wirksamkeit in bestimmten Kontexten beeinträchtigen können. Er konzentriert sich primär auf externe ausführbare Dateien und erkennt keine integrierten Befehle wie cd
oder read
. Außerdem kann er nicht zwischen Binärdateien und symbolischen Links unterscheiden. Da er ausschließlich in den in der $PATH
Variable angegebenen Verzeichnissen sucht, findet er keine Programme an anderen Speicherorten. Darüber hinaus fehlt die Möglichkeit, Details wie Dateityp, Berechtigungen oder Versionsinformationen bereitzustellen. Insbesondere wird bei fehlendem Befehl einfach keine Ausgabe zurückgegeben, sondern eine Fehlermeldung ausgegeben.
Um diese Einschränkungen zu umgehen, sollten Sie alternative Befehle wie whereis
, type
, oder verwenden ls
.
Wo vs. Welcher Befehl
Sowohl der Befehl where
als auch which
der Befehl dienen der Dateisuche, erfüllen aber unterschiedliche Zwecke. Der where
Befehl wird typischerweise unter Windows und bestimmten Unix-ähnlichen Systemen verwendet. Er sucht sowohl Dateien als auch Verzeichnisse und listet alle Treffer im Pfad des Systems auf.
Der Befehl hingegen which
ist ausschließlich auf Unix-ähnlichen Systemen verfügbar und konzentriert sich ausschließlich auf ausführbare Dateien in den in der $PATH
Variable angegebenen Verzeichnissen. Standardmäßig gibt er nur den ersten gefundenen Treffer zurück; die -a
Option ermöglicht jedoch die Auflistung aller Treffer.
Um den Unterschied zu verdeutlichen: where node
Unter Windows werden alle Speicherorte angezeigt, an denen sich die ausführbare Knotendatei befindet, während unter Linux which gcc
das erste Verzeichnis zurückgegeben wird, in dem sich der GCC-Compiler befindet.
Obwohl der Befehl eine Vielzahl von Funktionen bietet, which
fehlen ihm möglicherweise einige Funktionen. Benutzer können seine Einschränkungen jedoch durch die Verwendung zusätzlicher Befehle umgehen. Wichtig ist auch, dass er which
nur ausführbare Dateien in Ihrem erkennt $PATH
. Wenn Ihr Skript oder Programm nicht erkannt wird, fehlen ihm möglicherweise einfach die Ausführungsberechtigungen. Daher $PATH
ist es wichtig, sicherzustellen, dass sich Ihr Skript in einem Verzeichnis mit den entsprechenden Ausführungsberechtigungen befindet.
Häufig gestellte Fragen
1. Was ist der Hauptzweck des „Which“-Befehls?
Der Hauptzweck des Befehls besteht darin, die mit einem bestimmten Befehl verknüpfte ausführbare Datei zu finden, indem die in Ihrer Umgebungsvariablen which
angegebenen Verzeichnisse durchsucht werden.$PATH
2. Wie finde ich mit dem Befehl „which“ mehrere ausführbare Dateien gleichzeitig?
Sie können mehrere Befehle in einer einzigen which
Anweisung angeben, indem Sie sie durch Leerzeichen trennen, etwa so: which command1 command2
. Dadurch können Sie Pfade für alle angegebenen ausführbaren Dateien auf einmal abrufen.
3. Welche Einschränkungen muss ich bei der Verwendung des Befehls „which“ beachten?
Der which
Befehl weist mehrere Einschränkungen auf. Er kann beispielsweise keine integrierten Shell-Befehle finden, unterscheidet nicht zwischen Binärdateien und symbolischen Links und sucht nur in den in der $PATH
Variable angegebenen Verzeichnissen. Wird eine ausführbare Datei nicht gefunden, wird keine Fehlermeldung zurückgegeben, was irreführend sein kann.
Schreibe einen Kommentar ▼