|
|
|
Die Shell bash und der Suchpfad $PATH
Die Shell (oder auf Deutsch Kommandozeile) bash ist ein Programm, das dem Benutzer die
Interaktion mit dem Rechner, insbesondere das Absetzen von Kommandos,
das Aufrufen von Anwendungsprogrammen und die Einstellung der
Arbeitsumgebung ermöglicht. Neben der bash gibt es noch weitere Shells,
aber durch die Verbreitung von GNU/Linux wird die bash mittlerweile
am häufigsten verwendet.
Was passiert beim Absetzen eines Kommandos?
Wenn Sie ein Kommando der Form kommando arg1 arg2 arg3 auf der Shell absetzen,
dann sucht die Shell nach einem Programm mit dem Namen kommando, ruft es auf
und übergibt ihm dabei die Parameter arg1, arg2, und arg3.
Falls Sie zum Beispiel das Kommando ls /tmp aufgerufen,
dann wird ein Programm namens ls aufrufen und ihm der Parameter /tmp
übergeben.
Wo findet die Shell die aufzurufenden Programme?
Es gibt eine Shell-Variable $PATH, in der Unterverzeichnisse angegeben sind,
in denen die Shell nach Befehlen sucht. Man kann sich diese Variable wie folgt
ausgeben lassen:
echo $PATH
/usr/local/bin:/usr/bin:/bin
Bei Ihnen kann die Belegung der Variablen anders sein.
Wie ruft man Programme auf, die nicht über die $PATH-Variable erreichbar sind?
In diesem Fall gibt man den kompletten Pfad zu dem Programm an,
z.B. /opt/ooffice-2.1/program/soffice.
Programme aus dem aktuellen Verzeichnis ruft man über ./hello auf.
Wie nimmt man weitere Verzeichnisse in den Pfad auf?
Die Pfadvariable wird typischerweise in der Konfigurationsdatei .bashrc
gesetzt. Man kann ihr auf folgende Weise weitere Verzeichnisse hinzufügen:
PATH=$PATH:/opt/ooffice-2.1/program/soffice
Achtung: Geht dabei etwas schief, kann man sich ggf. nicht mehr
einloggen oder keine Programme mehr ausführen. Daher läßt man nach der
Änderung der $PATH-Variable immer den betreffenden Editor offen und
versucht sich auf einer anderen Maschine erneut einzuloggen
und dort Programme auszuführen. Wenn dies nicht gelingt,
kann man die Änderungen im Editor wieder rückgängig machen.
Niemals sollte man sich ausloggen, bevor die $PATH-Variable wieder in
Ordnung ist. Insbesondere wird ein Neustart der Sitzung
die .bashrc nicht auf magische Weise wiederherstellen, sondern
typischerweise dazu führen daß man sich selbst ausgesperrt hat.
Warum darf ich mir keine .bashrc von einem anderen Benutzer kopieren?
Der andere Benutzer könnte Pfadkomponenten gesetzt haben, die auf sein
eigenes Homeverzeichnis verweisen. Das kann dazu führen, daß
- der andere Benutzer Ihnen Programme mit Schadcode unterschiebt, und/oder
- Sie sich nicht mehr einloggen können, wenn der Account des anderen Benutzers gelöscht wird.
Warum darf ich den Punkt (.) nicht in den Pfad aufnehmen?
Wenn man viel programmiert, ist es lästig, seine eigenen Programme
via ./hallo aufzurufen. Manchmal findet man daher den schlechten Tip, den Punkt (.)
in den Pfad aufzunehmen.
Dies ist eine sehr schlechte Idee, da die Shell Programme aus dem jeweils
aktuellen Verzeichnis ausführt. Wenn Sie sich in einem weltschreibbaren
Verzeichnis wie z.B. /tmp befinden, könnte dort jemand ein Programm "ls"
hinlegen, das Ihr Homeverzeichnis löscht, sobald Sie ls dort eingeben.
Dann stelle ich den Punkt an das Ende des Pfades!
Auch das hilft nicht, wenn Sie sich bei der Eingabe eines Befehls
vertippen (z.B. mkae statt make). In diesem Fall
wird wieder versucht, ein Programm mkae aus dem aktuellen
Verzeichnis auszuführen, wobei unter Umständen Schadcode ausgeführt wird.
Was soll ich dann tun?
Erstellen Sie in Ihrem Arbeitsverzeichnis eine Ablage ~/bin für
fertige Programme und eine weitere Ablage ~/work zum Programmieren
und nehmen Sie diese in Ihren Pfad auf:
PATH=$PATH:~/bin:~/work
|