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.
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.
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.
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.