Zu Befehl
Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.
Bäume spielen unter Linux eine große Rolle: Verwandtschaftsverhältnisse von Prozessen, die Beziehungen von Fenstern in der grafischen Oberfläche zueinander und nicht zuletzt das Linux-Dateisystem – immer hat es der User mit hierarchischen Strukturen zu tun, auf die das Bild eines Baums mit seinen Verästelungen angefangen vom Stamm bis hin zu den Blattspitzen passt.
Ausgehend vom Wurzelverzeichnis / leiten sich weitere Verzeichnisse (die ihrerseits Unterordner oder Dateien enthalten dürfen) ab. Datei-Manager wie der Konqueror (Abbildung 1) illustrieren diese Verhältnisse in ihrer Baumansicht.
Eine solche Baumstruktur lässt sich prinzipiell beliebig aufbauen. Doch damit User wie Programme schnell die von ihnen benötigten Dateien finden, helfen Regeln, die festlegen, welche Ordner welche Dateien enthalten. Der unter http://www.pathname.com/fhs/ beschriebene "Filesystem Hierarchy Standard" FHS fasst diese zusammen (Tabelle 1). Demnach fahndet man nach von einer Software gebrauchten Bibliotheken erst einmal unterhalb des /lib- oder /usr/lib-Verzeichnisses; reagiert ein installiertes Programm nicht auf seinen Namen, liegt es womöglich nicht im /bin-, sondern im /sbin-Verzeichnis, das im Suchpfad normaler User oft fehlt.
Eine Besonderheit stellt der Ordner /usr/local dar. Er ist Software vorbehalten, die der Benutzer am Paket-Manager der Distribution vorbei installiert. Ein Distributionsupgrade sollte hier nichts anfassen. Das Verzeichnis selbst hat eine ähnliche Struktur wie der gesamte Dateibaum selbst – mit Unterverzeichnissen wie lib und bin.
Tabelle 1: Was liegt wo im Verzeichnisbaum?
| / | Das Wurzelverzeichnis (englisch: "root directory") |
| /home | Private Verzeichnisse der Benutzer |
| /root | Heimatverzeichnis des Superusers |
| /usr | Viele Anwendungsprogramme, das X-Window-System, Dokumentation und andere wichtige Daten. Enthält eine eigene Unterhierarchie mit /usr/bin, /usr/sbin etc. |
| /bin und /sbin | Ausführbare Programme (englisch: "binaries"), wobei die unter /sbin meist nur den Administrator interessieren |
| /etc | Konfigurationsdateien |
| /boot | Dateien und Programme für den Systemstart, u. a. der Kernel |
| /dev | Gerätedateien (englisch: "device") für die Hardware-Komponenten |
| /lib | Bibliotheken (englisch: "libraries") |
| /opt | Optionale Programme, meist größere Softwarepakete, die alle ihre Daten nicht im sonstigen System verteilen, sondern unter dem Dach eines gemeinsamen Verzeichnisses ablegen |
Viele Wege führen zum Ziel
Dateien und Verzeichnisse lassen sich in dieser Baumstruktur über einen Pfad finden – absolut oder relativ. Als absoluten Pfad bezeichnet man den Weg zur gewünschten Datei, der ausgehend von / alle "zu betretenden" Verzeichnisse nennt, z. B. /home/huhn/linux-user/titel.png. Absolute Pfadnamen beginnen immer im Wurzelverzeichnis.
Wer relative Pfade angibt, beginnt seinen Weg dagegen immer im aktuellen Verzeichnis (auch als Punkt . abgekürzt). Wo im Dateibaum man sich befindet, verrät der Befehl pwd ("print working directory"):
huhn@asteroid:~$ pwd /home/huhn
Die Datei /home/huhn/linux-user/titel.png lässt sich relativ zum aktuellen Arbeitsverzeichnis ansprechen:
huhn@asteroid:~$ ls linux-user/titel.png linux-user/titel.png
Befindet man sich hingegen im Verzeichnis linux-user und meint eine Datei im Home-Verzeichnis, muss man sich zur Angabe des relativen Pfads zunächst einen Schritt nach "oben" begeben. Das übergeordnete Verzeichnis symbolisieren dabei zwei Punkte ..:
huhn@asteroid:~/linux-user$ ls ../datei ../datei
Geschickt navigiert
Mit dem Befehl cd (englisch: "change directory") wechselt man in ein Verzeichnis hinein; cd ohne Verzeichnisnamen als Argument aufgerufen bringt den User ins eigene Home-Directory zurück. Auch hier kommen wieder relative und absolute Pfade ins Spiel. Nach /etc wechselt es sich wesentlich schneller, wenn man über den absoluten Pfad geht (cd /etc) statt sich mit cd ../../etc vom eigenen Home nach "oben" durchzuhangeln.
Die Linux-Standard-Shell Bash bringt einige praktische Funktionen mit, welche die Navigation auf der Kommandozeile erleichtern. Beispielsweise speichert sie die Information, in welchem Verzeichnis Benutzer zuletzt waren, in der Variablen OLDPWD. Mit cd OLDPWD springen sie dahin zurück; ein weiteres cd $OLDPWD bringt sie wieder zurück zur Ausgangsbasis. Das $OLDPWD lässt sich im Zusammenhang mit dem Kommando cd durch ein Minuszeichen ersetzen, was viel lästige Tipparbeit erspart (Listing 1).
Listing 1
Schnelles Hin- und Herwechseln zwischen zwei Verzeichnissen
huhn@asteroid:~$ cd linux-user/ huhn@asteroid:~/linux-user$ cd /etc/ huhn@asteroid:/etc$ cd - /home/huhn/linux-user huhn@asteroid:~/linux-user$ cd - /etc
Dabei "merkt" sich die Shell immer nur den letzten Aufenthalt; man springt also vor und zurück in den Verzeichnissen. Mehrere Directories lassen sich in einen sogenannten "Directory Stack" ("Verzeichnisstapel") packen. Die Bash bringt dafür die eingebauten Befehle ("Builtins") pushd und popd mit. Ersetzt der User bei einem Verzeichniswechsel das cd- durch das pushd-Kommando, legt die Shell die Aufenthaltsorte in genau dieser Reihenfolge auf den Stapel. Da sich vermutlich niemand den Inhalt des Stacks merken will, gibt die Bash ihn jeweils im Anschluss an das Kommando aus:
huhn@asteroid:~$ pushd linux-user/ ~/linux-user ~ huhn@asteroid:~/linux-user$ pushd zubefehl/ ~/linux-user/zubefehl ~/linux-user ~
Nach dem zweiten pushd-Befehl ist der Stapel auf insgesamt drei Verzeichnisse angewachsen. Ganz rechts steht das eigene Home (abgekürzt durch die Tilde ~), in der Mitte mit absoluter Pfadangabe ~/linux-user und ganz links der augenblicklich besuchte Ort ~/linux-user/zubefehl.
Zurück geht es (von links nach rechts) mit popd: Das Kommando entfernt den letzten Eintrag aus dem Stapel und führt ein cd ins nächste Verzeichnis der Liste aus. Für das vorhergehende Beispiel heißt das: Einmal aufgerufen bringt es die Benutzerin nach ~/linux-user zurück, beim zweiten Mal landet sie wieder im Home-Verzeichnis:
huhn@asteroid:~/linux-user/zubefehl$ popd ~/linux-user ~ huhn@asteroid:~/linux-user$ popd ~
Verliert man in einem solchen Stapel einmal die Übersicht, hilft ein weiteres Bash-Builtin namens dirs weiter:
huhn@asteroid:~/linux-user/zubefehl$ dirs ~/linux-user/zubefehl ~/linux-user ~
Übersichtlicher, mit einem Eintrag pro Zeile zeigt dirs -p aus der Bash-Version 2 die Verzeichnisse auf dem Stapel an; mit dem Parameter -c aufgerufen, löscht Bash 2 den Stack. Die gespeicherten Verzeichnisse lassen sich mit pushd +zahl rotieren: pushd +1 bringt beispielsweise das zweite Verzeichnis der Liste von links an den Anfang; die Zählung beginnt mit 0.
Glossar
$
Stellt man dem Namen einer Variablen in der Shell ein Dollarzeichen voran, gibt sie den Inhalt derselben zurück.



