Befehle lokalisieren: PATH-Varibale und Pfadsuche

Inhaltsverzeichnis

Warum du PATH und Suche verstehen musst

Die Shell findet Befehle über deine PATH-Variable, eine Liste von Verzeichnissen, die sequentiell durchsucht werden – siehe mit echo $PATH, z. B. /usr/local/bin:/usr/bin:/bin:/usr/sbin:/home/deinuser/bin.

In dem oberen Beispiel sind es 5 Pfade in denen die Shell nach den Befehlen sucht. Sie durchsucht die Pfade von Links nach rechte. Wenn also mehrere Programme mit dem selben Namen vorhanden sind wird von links nach rechts das erste Programm aufgerufen. Weiterhin priorisiert die Shell die Eingaben wie folgt:

Aliase > reserved words > Functions > Built-ins (cd, echo, pwd) > Filesystem-Befehle.

Das heißt, die eigen angelegten Aliase würden vor der für die Shell reservierten Wörtern, Funktione, in der Shell enthaltenen Programmen und den Filesystem-Befehlen abgerufen werden.

Standard-Binaries liegen in /bin (Symlink zu /usr/bin), /usr/bin, /usr/local/bin für User-Befehle und /sbin, /usr/sbin für Admin-Tools.

Füge eigene Skripte in ~/bin (automatisch in der PATH-Variable enthalten) oder /usr/local/bin (systemweit) hinzu wenn due deine Skripte wie Programme nutzen willst. Gib Execute-Rechte mit chmod +x. Das spart Tipparbeit und macht Befehle global verfügbar.​​

Absolute Pfade und relative Pfade

Neben dem aufrufen des Befehls mit seinem Namen in der schell, kannst du Porgramme auch mit ihrem absoluten und relativen Pfad aufrufen.

Rufe Befehle mit absolutem Pfad auf, z. B. /bin/programmname, wenn das Programm nicht im Pfad der PATH-Variable enhalten ist. Nutze ./programmname für relative Pfade Wenn du z.B. ein Skript startest, das in dem Verzeichnis liegt in dem du dich befindest.

Pfade zur PATH hinzufügen

Wenn du einen eigenen Pfad zur PATH-Variable hinzufügen willst kannst du es temporär und fix machen.

Füge temporär einen Pfad hinzu (funktioniert bis zum Logout):

# An den Pfad vorne angehängt$ export PATH="/neuer/pfad:$PATH"
# An den Pfad hinten angehängt
$ export PATH="$PATH:/neuer/pfad" 

Um Änderungen an der PATH-Variable permanent zu machen, bearbeite shell-spezifische Konfigurationsdateien, die beim Start geladen werden.

Für deinen User: Füge in ~/.bashrc die Zeile export PATH="/neuer/pfad:$PATH" ein (vorne für Priorität). Lade mit source ~/.bashrc oder starte neu. Für login-Shells (z. B. SSH): Nutze ~/.profile oder ~/.bash_profile (letzteres lädt oft ~/.bashrc). ~/.bashrc wirkt bei GNOME Terminal etc., ~/.profile bei allen POSIX-Shells.

Befehle suchen

Wenn du das Verzeichnis eines Porgramms suchst nutze type -a befehl (für Typ/Orte) oder which nur (Ort).

$ type -a uname
uname ist /usr/bin/uname

$ which uname
/usr/bin/uname

Alternativ kannst du auch plocate befehl (früher locate) für die ganze System-Suche nutzen.

Wenn du das Programm erst jetzt hinzugefügt hast muss du eventuell die Datenbank mit sudo updatedb aktualisiseren.

$ sudo updatedb
$ plocate chage
...
/usr/bin/chage
/usr/bin/lchage
..

plocate chage listet nicht nur Binaries sondern auch Manpages und andere Files.

Zusammenfassung

Verwalte Befehle effizient mit der PATH-Variable und füge Pfade wenn nötig via export oder ~/.bashrc hinzu. Priorisiere Suche mit type oder which und finde mit plocate/updatedb auch Manpages und andere Files mit dem selben Namen. Füge eigene Skripte in ~/bin hinzu und vermeide Fallen wie falsche Reihenfolge oder fehlende Rechte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Andreas Moor
Andreas Moor
@blog@andreas-moor.de

Hallo Fediverse, ich bin Andy!

Hier und auf meiner Website findest du mein akkumuliertes Linux-Sysadmin-Wissen, meine kleinen und größeren Projekte und die Tools, die ich nutze.

Viel Spaß beim stöbern, lesen und lernen! 🧑‍💻

236 Beiträge
16 Folgende