navigation Navigation


PATH


Die PATH Variable in Linux ist eine Umgebungsvariable, die dem Betriebssystem mitteilt, in welchen Verzeichnissen nach ausführbaren Dateien (also Programmen und Skripten) gesucht werden soll, wenn ein Befehl ohne Angabe eines vollständigen Pfads eingegeben wird. Diese Variable ist von entscheidender Bedeutung für die Funktionalität der Shell und die Ausführung von Programmen im System.

Grundlagen

Die Umgebungsvariable PATH enthält eine Liste von Verzeichnissen, die durch Doppelpunkte (:) getrennt sind. Wenn ein Benutzer einen Befehl in der Shell eingibt, durchsucht das System diese Verzeichnisse in der Reihenfolge, in der sie in der PATH-Variable aufgeführt sind, nach einem Programm, das diesen Befehl ausführen kann.

Beispiel

Angenommen, man gibt den Befehl ls in der Shell ein. Folgendes passiert dabei.

  • Das System sucht zuerst im ersten Verzeichnis der PATH Variable nach einem Programm namens ls.
  • Wenn es dort nicht gefunden wird, durchsucht es das nächste Verzeichnis, und so weiter.
  • Wenn das Programm in keinem der Verzeichnisse gefunden wird, gibt die Shell eine Fehlermeldung aus: command not found.

Typische Eintrage in der PATH-Variable könnten wie folgt aussehen:

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

Verwendung von PATH Variable

Anzeigen der PATH-Variable

Um die aktuelle PATH-Variable anzuzeigen (den Inhalt der Variable), verwendet man folgenden Befehl.

echo $PATH

Hinzufügen zur PATH-Variable

Um ein neues Verzeichnis zur PATH Variable hinzuzufügen, kann man folgende Anweisung verwenden.

export PATH=$PATH:/home/benutzername/bin

Alternativ kann man diese Zeile in der .profile, .bashrc oder .bash_profile Dateien eintragen, um dauerhaft diesen Pfad in der PATH Variable zu haben.

Wenn man ein Skript mein-skript.sh in /home/benutzername/bin hat, kann man es ausführen, indem man einfach mein-skript.sh in der Shell eingibt, anstatt den gesamten Pfad anzugeben.

$PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/binPATHPATH$PATH:/home/user/bin=+:/home/user/bin=+

Das „:“ Doppelpunkt, das man zwischen den einzelnen Verzeichnissen sieht, ist lediglich ein Verbinder der einzelnen Abschnitte des Variableninhaltes. Wie man am Hinzufügen sieht, wird der aktuellen Wert der PATH Variable genommen und zu diesem wird (im Beispiel-Schema) „:/home/usr/bin“ hinzugefügt.


Persistente Änderungen an PATH

Wie oben schon angedeutet, sind die, direkt in der Shell hinzugefügten, Ergänzungen von PATH nur temporär. Beim nächsten Laden der Shell sind diese Änderungen weg. Um eine Änderung dauerhaft zu machen, muss man die PATH Variable in einer der Startdateien der Shell setzen, wie z.B. .bashrc oder .bash_profile.

export PATH=$PATH:/home/benutzername/bin

Danach muss man entweder die .bashrc neu laden oder eine neue Shell-Sitzung starten, damit die Änderung wirksam wird.

Konfiguration neu laden
source ~/.bashrc

Sicherheit und Reihenfolge

Reihenfolge

Die Reihenfolge der Verzeichnisse in der PATH Variable ist wichtig. Das System durchsucht die Verzeichnisse in der Reihenfolge, in der sie aufgelistet sind. Wenn sich zwei Programme mit demselben Namen in unterschiedlichen Verzeichnissen befinden, wird das Programm verwendet, das zuerst gefunden wird.

Beispiel
Angenommen, man hat zwei Versionen eines Programms myprog, eine in /usr/bin und eine in /usr/local/bin. Wenn /usr/local/bin vor /usr/bin in PATH steht, wird die Version von myprog in /usr/local/bin ausgeführt.

Sicherheitsaspekt

Ein Sicherheitsrisiko besteht, wenn das aktuelle Verzeichnis (.) in PATH enthalten ist, insbesondere am Anfang. Dies könnte dazu führen, dass ein bösartiges Skript oder Programm das zufällig denselben Namen wie ein häufiger Befehl hat, ausgeführt wird, wenn man sich in einem Verzeichnis befindet, das dieses Skript enthält. Es ist daher ratsam, . entweder gar nicht oder nur am Ende der PATH Variable zu platzieren.

Fehlerbehebung

Wenn Programme nicht gefunden werden, obwohl sie installiert sind, kann dies oft auf Probleme mit der PATH Variable zurückzuführen sein. Ein häufiger Fehler ist, dass das Verzeichnis, in dem das Programm liegt, nicht in der PATH Variable enthalten ist oder dass eine falsche Version des Programms aufgerufen wird, weil ein anderes Verzeichnis in der PATH weiter oben steht.

Diagnosebeispiel
which myprog

Der which Befehl zeigt an, welches Programm ausgeführt wird, wenn man einen bestimmten Befehl eingibt. Wenn ein anderes als erwartetes Programm ausgeführt wird, sollte man die Reihenfolge der Verzeichnisse in der PATH Variable überprüfen.