Linux which-Befehl: Befehlssuche

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab begibst du dich als Junior-Entwickler bei TechCorp auf eine Reise, bei der du mit der Einrichtung einer neuen Entwicklungsumgebung betraut wirst. Deine Mission besteht darin, den which-Befehl zu beherrschen, ein entscheidendes Werkzeug zur Lokalisierung von ausführbaren Dateien im System-Pfad (PATH). Diese Fähigkeit wird sich als unschätzbar erweisen, wenn du dich in der komplexen Welt der Softwareentwicklung und Systemadministration zurechtfindest.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/FileandDirectoryManagementGroup -.-> linux/which("Command Locating") subgraph Lab Skills linux/echo -.-> lab-215210{{"Linux which-Befehl: Befehlssuche"}} linux/which -.-> lab-215210{{"Linux which-Befehl: Befehlssuche"}} end

Grundlagen des 'which'-Befehls verstehen

Als du dich in deine neue Rolle bei TechCorp einarbeitest, bittet dich dein Teamleiter, die Installation einiger wichtiger Entwicklungstools zu überprüfen. Der which-Befehl wird dein bevorzugtes Werkzeug für diese Aufgabe sein.

Der which-Befehl wird verwendet, um die ausführbare Datei zu finden, die einem bestimmten Befehl zugeordnet ist, indem er durch die Verzeichnisse sucht, die in der Umgebungsvariablen PATH aufgeführt sind.

Beginnen wir damit, den gcc-Compiler zu lokalisieren:

which gcc

Du solltest eine Ausgabe ähnlich dieser sehen:

/usr/bin/gcc

Diese Ausgabe sagt dir, dass die ausführbare gcc-Datei im Verzeichnis /usr/bin liegt. Das bedeutet, wenn du gcc im Terminal eingibst, wird das System die Datei ausführen, die sich unter /usr/bin/gcc befindet.

Jetzt versuchen wir, ein weiteres wichtiges Tool, python, zu lokalisieren:

which python

Du könntest etwas wie Folgendes sehen:

/usr/local/bin/python

Der which-Befehl sucht durch die Verzeichnisse, die in deiner PATH-Umgebungsvariablen aufgeführt sind, und gibt die erste Übereinstimmung zurück, die er findet. Wenn du einen anderen Pfad siehst, keine Sorge – das bedeutet nur, dass Python an einem anderen Ort auf deinem System installiert ist.

Umgang mit nicht vorhandenen Befehlen

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

which techbuild

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

Das liegt daran, dass which nichts zurückgibt, wenn es den Befehl in Ihrem PATH nicht finden kann. Machen Sie sich keine Sorgen über die fehlende Ausgabe – so signalisiert Ihnen der Befehl, dass techbuild in keinem der Verzeichnisse in Ihrem PATH gefunden wurde.

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

  1. Der echo-Befehl: Dieser wird verwendet, um eine Textzeile/String im Terminal anzuzeigen.
  2. Der >-Operator: Dieser wird verwendet, um die Ausgabe in eine Datei umzuleiten.

Lassen Sie uns ein Skript erstellen, um nach techbuild zu suchen:

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

Dieser Befehl macht einige Dinge:

  • Er verwendet echo, um ein Shell-Skript zu schreiben.
  • Der Skriptinhalt ist in einfache Anführungszeichen eingeschlossen.
  • Der >-Operator leitet die Ausgabe von echo in eine neue Datei namens check_techbuild.sh in Ihrem Home-Verzeichnis um.

Jetzt machen wir dieses Skript ausführbar und führen es aus:

chmod +x ~/check_techbuild.sh
~/check_techbuild.sh

Dieses Skript gibt "techbuild is not installed" aus, wenn der Befehl nicht gefunden wird.

Entdecken mehrerer Installationen

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

which -a python

Sie könnten eine Ausgabe wie diese sehen:

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

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

Das Verständnis dessen ist von entscheidender Bedeutung, da es Ihnen alle möglichen ausführbaren Python-Dateien aufzeigt, die abhängig von Ihrer PATH-Konfiguration ausgeführt werden könnten. Die erste in der Liste aufgeführte Datei wird ausgeführt, wenn Sie python im Terminal eingeben.

Verständnis der PATH-Priorität

Ihr Teamleiter erklärt Ihnen, dass die Reihenfolge der Verzeichnisse in der PATH-Umgebungsvariablen bestimmt, welche Version eines Befehls standardmäßig verwendet wird. Schauen wir uns Ihren PATH an:

echo $PATH

Sie werden eine durch Doppelpunkte getrennte Liste von Verzeichnissen sehen. Beispielsweise:

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

Die Reihenfolge ist wichtig: Verzeichnisse, die früher in der Liste stehen, haben eine höhere Priorität. Das bedeutet, wenn es zwei ausführbare Dateien mit demselben Namen in verschiedenen Verzeichnissen gibt, wird die Datei im Verzeichnis verwendet, das als erstes im PATH erscheint.

Jetzt suchen wir alle Vorkommen des ls-Befehls:

which -a ls

Sie könnten Folgendes sehen:

/usr/bin/ls
/bin/ls

Auch wenn /bin/ls als letztes aufgeführt ist, könnte es die Datei sein, die ausgeführt wird, wenn Sie ls eingeben, je nach Ihrer PATH-Konfiguration. Dies zeigt, warum das Verständnis der PATH-Priorität in einer Entwicklungsumgebung von entscheidender Bedeutung ist.

Erstellen eines benutzerdefinierten Befehls

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

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

Dieser Befehl erstellt eine neue Datei namens hello in Ihrem Home-Verzeichnis (~ ist eine Abkürzung für das Home-Verzeichnis) und macht sie ausführbar. Das Skript gibt einfach "Hello from TechCorp!" aus, wenn es ausgeführt wird.

Jetzt versuchen Sie, es auszuführen:

hello

Sie erhalten eine Fehlermeldung "command not found", weil 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 Sie Ihr Home-Verzeichnis temporär dem PATH hinzu:

export PATH=$PATH:$HOME

Dieser Befehl fügt Ihr Home-Verzeichnis ans Ende des PATH hinzu. Der export-Befehl macht den geänderten PATH für alle Subprozesse verfügbar.

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 im PATH findet.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie den which-Befehl verwenden können, um ausführbare Dateien in Ihrem System-PATH zu finden. Sie haben gelernt, wie Sie:

  1. Die Speicherorte installierter Programme ermitteln können
  2. Mit nicht vorhandenen Befehlen umgehen können
  3. Mehrere Installationen desselben Befehls entdecken können
  4. Die Priorität des PATH verstehen können
  5. Benutzerdefinierte Befehle erstellen und finden können

Sie wurden auch mit neuen Konzepten wie dem echo-Befehl und der Ausgabeumleitung mit > vertraut gemacht.

Zusätzliche Optionen des which-Befehls, die in diesem Lab nicht behandelt wurden, sind:

  • -i: Groß- und Kleinschreibung wird sowohl beim Befehlsnamen als auch bei der PATH-Suche ignoriert
  • -p: Der Standard-PATH wird anstelle des aktuellen verwendet
  • -v: Ausführlicher Modus, gibt eine Fehlermeldung aus, wenn der Befehl nicht gefunden wird

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