Linux-Befehl 'which': Befehle lokalisieren

LinuxBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie den Befehl which verwenden, um die ausführbare Datei zu finden, die eine Shell für einen bestimmten Befehlsnamen ausführt. Sie werden installierte Befehle überprüfen, mit nicht verfügbaren Befehlen umgehen, mehrere Treffer auflisten und sehen, wie sich die PATH-Variable auf das Ergebnis auswirkt.

Um das Verhalten von which besser verständlich zu machen, verwendet dieses Lab auch einige unterstützende Shell-Konzepte wie einfache Skripte, Ausführungsberechtigungen und temporäre Änderungen des PATH. Jedes neue Konzept wird direkt bei der Anwendung erklärt, damit Sie sich darauf konzentrieren können, warum which einen bestimmten Pfad zurückgibt.

Die Grundlagen von 'which' verstehen

Während Sie sich in Ihrer neuen Rolle bei TechCorp einarbeiten, bittet Sie Ihr Teamleiter, die Installation einiger wichtiger Entwicklungstools zu überprüfen. Der Befehl which wird für diese Aufgabe Ihr bevorzugtes Werkzeug sein.

Der Befehl which wird verwendet, um die ausführbare Datei zu lokalisieren, die mit einem bestimmten Befehl verknüpft ist, indem die in der Umgebungsvariablen PATH aufgelisteten Verzeichnisse durchsucht werden.

Beginnen wir mit der Lokalisierung des gcc-Compilers:

which gcc

Sie sollten eine Ausgabe ähnlich dieser sehen:

/usr/bin/gcc

Diese Ausgabe zeigt Ihnen, dass sich die ausführbare Datei gcc im Verzeichnis /usr/bin befindet. Das bedeutet, wenn Sie gcc im Terminal eingeben, führt das System die Datei unter /usr/bin/gcc aus.

Versuchen wir nun, ein weiteres wichtiges Tool zu finden, python:

which python

Möglicherweise sehen Sie etwas wie:

/usr/local/bin/python

Der Befehl which durchsucht die in Ihrer PATH-Umgebungsvariablen aufgeführten Verzeichnisse und gibt den ersten Treffer zurück, den er findet. Wenn Sie einen anderen Pfad sehen, machen Sie sich keine Sorgen – das bedeutet lediglich, dass Python an einem anderen Ort auf Ihrem System installiert ist.

Umgang mit nicht vorhandenen Befehlen

Ihr Teamleiter erwähnt, dass TechCorp früher ein benutzerdefiniertes Build-Tool namens techbuild verwendet hat. Prüfen wir, ob es noch installiert ist:

which techbuild

Möglicherweise sehen Sie keine Ausgabe (Bash-Shell) oder eine Fehlermeldung wie techbuild not found (Zsh-Shell).

Das liegt daran, dass which nichts zurückgibt, wenn der Befehl nicht in Ihrem PATH gefunden werden kann. Lassen Sie sich von der fehlenden Ausgabe nicht beunruhigen – es ist die Art des Befehls, Ihnen mitzuteilen, dass techbuild in keinem der Verzeichnisse Ihres PATH gefunden wurde.

Um dieses Verhalten deutlicher zu machen, können wir ein einfaches Shell-Skript verwenden. Wir führen hier zwei neue Konzepte ein:

  1. Ein Shell-Skript ist eine Textdatei, die Befehle speichert und diese n Reihenfolge ausführt.
  2. Das Muster cat <<'EOF' ... EOF schreibt mehrere Zeilen in eine Datei, ohne dass Sie sich um mehrere verschachtelte Anführungszeichen kümmern müssen.

Erstellen wir ein Skript, um nach techbuild zu suchen:

cat > ~/check_techbuild.sh <<'EOF'
#!/bin/bash
if which techbuild >/dev/null 2>&1; then
  echo "techbuild is installed"
else
  echo "techbuild is not installed"
fi
EOF

Dieser Befehl erstellt eine Datei namens ~/check_techbuild.sh und füllt sie mit einem kleinen Bash-Skript.

Hier ist die Bedeutung der wichtigen Zeilen:

  • #!/bin/bash weist Linux an, das Skript mit Bash auszuführen.
  • which techbuild prüft, ob der Befehl in Ihrem PATH gefunden werden kann.
  • >/dev/null 2>&1 verbirgt die normale Ausgabe und die Fehlerausgabe, damit das Skript sein eigenes klares Ergebnis ausgeben kann.

Geben Sie der Datei nun die Ausführungsberechtigung und führen Sie sie aus:

chmod +x ~/check_techbuild.sh

Der Befehl chmod +x fügt die Ausführungsberechtigung hinzu, wodurch Linux die Datei als Befehl ausführen kann.

~/check_techbuild.sh

Dieses Skript gibt techbuild is not installed aus, da which diesen Befehl nicht finden konnte.

Mehrere Installationen entdecken

Während Sie Ihre Umgebung weiter einrichten, stellen Sie fest, dass TechCorp für verschiedene Projekte mehrere Python-Versionen verwendet. Die Option -a von which kann Ihnen helfen, alle Installationen eines Befehls zu entdecken:

which -a python

Sie sehen möglicherweise eine Ausgabe wie diese:

/usr/local/bin/python
/usr/bin/python
/bin/python

Diese Ausgabe zeigt an, dass mehrere Python-Installationen auf dem System vorhanden sind. Die Option -a weist which an, alle passenden ausführbaren Dateien im PATH auszugeben, nicht nur die erste.

Dies zu verstehen ist entscheidend, da es Ihnen alle möglichen ausführbaren Python-Dateien zeigt, die je nach Ihrer PATH-Konfiguration ausgeführt werden könnten. Die erste aufgelistete Datei ist diejenige, die ausgeführt wird, wenn Sie python im Terminal eingeben.

PATH-Priorität verstehen

Ihr Teamleiter erklärt, dass die Reihenfolge der Verzeichnisse in der PATH-Variablen bestimmt, welche Version eines Befehls standardmäßig verwendet wird. Überprüfen wir Ihren PATH:

echo $PATH

Sie sehen eine durch Doppelpunkte getrennte Liste von Verzeichnissen. Zum Beispiel:

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

Die Reihenfolge ist wichtig: Verzeichnisse, die früher aufgeführt sind, haben eine höhere Priorität. Das bedeutet, wenn es zwei ausführbare Dateien mit demselben Namen in verschiedenen Verzeichnissen gibt, wird diejenige im Verzeichnis verwendet, das im PATH zuerst erscheint.

Das Lab-Setup hat bereits einen benutzerdefinierten ls-Befehl in ~/custom_bin erstellt. Fügen Sie dieses Verzeichnis an den Anfang Ihres PATH an, damit es vor den Systemverzeichnissen überprüft wird:

export PATH=$HOME/custom_bin:$PATH

Überprüfen Sie nun, welcher ls-Befehl standardmäßig ausgeführt wird:

which ls

Sie sollten eine Ausgabe ähnlich dieser sehen:

/home/labex/custom_bin/ls

Um jeden passenden ls-Befehl in Ihrem PATH zu sehen, führen Sie aus:

which -a ls

Sie sollten zuerst Ihren benutzerdefinierten Befehl sehen, gefolgt von den Systemversionen:

/home/labex/custom_bin/ls
/usr/bin/ls
/bin/ls

Dies demonstriert die PATH-Priorität deutlich: which ls gibt die erste passende ausführbare Datei zurück, während which -a ls die vollständige Suchergebnisliste anzeigt.

Einen benutzerdefinierten Befehl erstellen

Ihr Teamleiter schlägt vor, einen einfachen benutzerdefinierten Befehl zu erstellen, um zu demonstrieren, wie which mit dem PATH interagiert. Erstellen wir ein Skript namens hello in Ihrem Home-Verzeichnis:

cat > ~/hello <<'EOF'
#!/bin/bash
echo "Hello from TechCorp!"
EOF
chmod +x ~/hello

Dies erstellt eine neue Datei namens hello in Ihrem Home-Verzeichnis und macht sie ausführbar. Das Skript gibt Hello from TechCorp! aus, wenn es ausgeführt wird.

Versuchen Sie nun, es auszuführen:

hello

Sie erhalten einen Fehler vom Typ "command not found", da Ihr Home-Verzeichnis nicht im PATH enthalten ist. Der PATH ist eine Liste von Verzeichnissen, in denen die Shell nach ausführbaren Dateien sucht.

Fügen wir Ihr Home-Verzeichnis temporär zum PATH hinzu:

export PATH="$PATH:$HOME"

Dieser Befehl fügt Ihr Home-Verzeichnis für die aktuelle Terminalsitzung am Ende des PATH hinzu. Der Befehl export macht den aktualisierten PATH für Befehle verfügbar, die Sie danach ausführen.

Jetzt können Sie hello ausführen, und which wird es finden:

hello
which hello

Sie sollten "Hello from TechCorp!" und den Pfad zu Ihrem Skript sehen. Dies zeigt, wie which ausführbare Dateien in jedem Verzeichnis findet, das in Ihrem PATH aufgeführt ist.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie den Befehl which verwenden, um ausführbare Dateien im PATH Ihres Systems zu lokalisieren. Sie haben gelernt:

  1. Den Speicherort installierter Programme zu finden
  2. Mit nicht vorhandenen Befehlen umzugehen
  3. Mehrere Installationen desselben Befehls zu entdecken
  4. Die PATH-Priorität zu verstehen
  5. Benutzerdefinierte Befehle zu erstellen und zu lokalisieren

Sie haben außerdem geübt, einfache Shell-Skripte zu schreiben, Dateien mit chmod +x ausführbar zu machen und den PATH anzupassen, um zu steuern, welcher Befehl ausgeführt wird.

Diese Fähigkeiten werden von unschätzbarem Wert sein, während Sie Ihre Reise als Entwickler bei TechCorp und darüber hinaus fortsetzen.