Absolute & relative Pfade
Grundlagen
Was ist ein Pfad?
Ein Pfad ist die „Adresse“ einer Datei oder eines Verzeichnisses im Dateibaum. Es gibt zwei Arten, eine solche Adresse anzugeben: absolut (von der Wurzel aus) und relativ (vom aktuellen Verzeichnis aus). Beide führen zum selben Ziel – sie beschreiben nur den Weg unterschiedlich. Den Unterschied sicher zu beherrschen, ist eine der wichtigsten Grundlagen.
Absolute Pfade
Ein absoluter Pfad beginnt immer mit einem Schrägstrich /, also bei der Wurzel des Dateibaums. Er ist eindeutig und funktioniert von jedem Ort aus – egal, wo du dich gerade befindest:
$ cat /home/anna/projekte/notizen.txt $ cd /var/log $ ls /etc/ssh/
Merke: Beginnt der Pfad mit /, ist er absolut.
Relative Pfade
Ein relativer Pfad beginnt nicht mit /, sondern wird ab dem aktuellen Arbeitsverzeichnis interpretiert. Befindest du dich in /home/anna, dann meint projekte/notizen.txt dieselbe Datei wie der absolute Pfad oben:
$ pwd /home/anna $ cat projekte/notizen.txt # relativ $ cat /home/anna/projekte/notizen.txt # absolut, identisch
Die Sonderzeichen . .. und ~
| Zeichen | Bedeutung |
|---|---|
. | Das aktuelle Verzeichnis |
.. | Das übergeordnete Verzeichnis (eine Ebene höher) |
~ | Das eigene Home-Verzeichnis (z. B. /home/anna) |
~user | Das Home-Verzeichnis von user |
Damit lassen sich Wege elegant abkürzen. Ein paar Beispiele:
$ cd ~/projekte # ins Unterverzeichnis projekte im Home $ cp ../bild.png . # aus dem Elternverzeichnis ins aktuelle kopieren $ cd ../../etc # zwei Ebenen hoch, dann nach etc $ ./skript.sh # Skript im aktuellen Verzeichnis ausführen
Das führende ./ beim Skript ist wichtig: Es sagt der Shell, dass das Programm im aktuellen Verzeichnis liegen soll – sonst sucht sie nur entlang der PATH-Liste.
Die Idee hinter PATH
Wenn du ls tippst, woher weiß die Shell, wo das Programm ls liegt? Die Antwort steckt in der Umgebungsvariable PATH – einer durch Doppelpunkte getrennten Liste von Verzeichnissen, in denen die Shell nach ausführbaren Programmen sucht:
$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Die Shell durchsucht diese Verzeichnisse der Reihe nach und führt das erste passende Programm aus. Deshalb kannst du ls tippen statt /usr/bin/ls. Liegt dein eigenes Programm nicht in einem PATH-Verzeichnis, musst du es mit vollem oder relativem Pfad (./programm) aufrufen.
Woran erkennst du einen absoluten Pfad?
Hinweis
Absolute Pfade sind robust, aber lang; relative Pfade sind kurz, hängen aber vom aktuellen Standort ab. In Skripten verwendet man oft absolute Pfade, um Überraschungen zu vermeiden. Als Nächstes: Wie du dir selbst Hilfe zu Befehlen verschaffst.