UnixTools01 04
Path Names
Die Namen, über die der Computer eine Datei (oder auch ein Verzeichnis) findet, nennen wir Path Names, denn sie zeigen den Pfad an, wie man (womöglich über mehrere Verzeichbnisse hinweg) zu der gesuchte Datei (oder dem gewünschten Verzeichnis) findet.
Wir unterscheiden absolute Path NAmes' und relative Path Names'.
Ein absoluter Path Name beginnt mit einem /. Das bedeutet, die Suche nach der gewünschten Datei (oder dem gewünschten Verzeichnis) beginnt am systemweiten Startpunkt des Dateisystems (den man übrigens auch Root nennt). Egal, was gerade unser Working Directory ist, ein absoluter Path Name bedeutet also immer dasselbe. Ein relativer Path Name beginnt nicht mit enem /. Bei ihm beginnt die Suche nicht an der Wurzel des Dateisystems, sondern im aktuellen Working Directory. Je nachdem, in welches Working Directory wir uns mithilfe von cd gerade begeben haben, bedeutet ein relativer Path Name also immer etwas anderes. Wir können uns laso vorstellen, vor einen relative Path einfach den (absoluten Path) des aktuellen Working Directories davor zu schreiben und erhalten dadurch den absoluten Path, also den Path, der ausgehend von der Dateisystemwurzel zu der gewünschen Datei führt.
cd ..
.. ist ein relativer Path Name. Ausgehend vom aktuellen Working Directory gehen wir ein Verzeichnis zurück
cd ../a
../a ist ein relativer Path Name. Ausgehend vom aktuellen WOrking Directory gehen wir einen Schritt zurück, und von dort (wieder vorwärts) aus zu a
cd ./a
./a ist ebenfalls ein relativer Path. Ausgehend vom aktuellen Working Directory gehen wir zu . (also zu genau dem Verzeichnis, in dem wir gerade sind) und von dort zu a. Man könnte sagen, ./a und a bedeuten dasselbe. Das ist auch richtig so. Doch wozu brauchen wir diese Schreibweise, warum erwähnen wir sie überhaupt? Stellen wir uns vor statt einer Datei a hätten wir eine Datei mit dem Namen -l. Das ist vielliecht etwas ungewöhnlich, aber möglich. Würden wir jetzt das Kommando
ls -a
aufrufen, würde ls denken, dass wir mit -l eine Option angeben wollen (-l = long format), es würde es nicht als Name einer Datei ansehen. Geben wir den Namen der Datei nun also als ./-l an, so bedutet dieser Name immer noch dasselbe aber er fängt nicht mehr mit - an, und das Kommando ls ist nicjht mehr verwirrt.
ls ./-l
Jetzt funktioniert alles, wie gewollt.
<TAB>
Die Shell hilft uns dabei, Path Names einzugeben. Wir müssen nur den Anfang des Namens eingeben, und sobald der Rest eindeutig ist, könen wir den Tabularor <TAB> drücken, und die Shell vervollständigt den Namen automatisch für uns. Ist der Name noch nicht eindeutig, d.h. gibt es meherer Dateien (oder Verzeichnisse),deren NAmen so beginnen, dann vervollständigt <TAB> den Namen, soweit wie möglich, d.h. bis wir entscheiden müssen, wie es weitergeht.
Dieses als Auto Complete bezeichnete Hilfe der Shell spart nicht nur viel Tipparbeit bei langen Namen. Sie ist auch bei kurzen Namen sinnvoll. Denn falls wir beim Schreiben eines Namen einen Tippfehler machen, zeigt und <TAB> durch einen Signalton an, dass eine Vervollständigung nicht möglich ist. Wir können also den Tippfehler viel früher entdecken und korrigieren. Esist also eine gute Praxis, beim Eingeben von Dateinamen in der Shell so oft wie möglich die automatische vervollständigung zu nutzen - um Tipparbeit zu sparen und (vor allem) um Tippfehler frühzeitig zu erkennen.
., .. und andere Dateinamen, di emit . beginnen
In einem Pathname können natürlich auch Namen verwendet werden, die mit einem Punkt . beginnen. Auch wenn das Kommando ls diese Namen standardmäßig nicht anzeigtm existieren sie trotzdem und können verwendet werden, wie alle anderen Namen auch.
Q&E:
- Ist ~/bin ein absoluter Path oder ein relativer Path?
(Antwort: Es ist ein absoluter Path, denn ~ steht für den absoluten Path des Home Directories, an nur hinten die Komponente bin angehängt wird)
- Was bedeutet ls ../b/../c/../d/././e ? Gibt es dafür eine kürzere Schreibweise?
- Was bedeutet der Pathname ~/.. ?. Ist es ein absoluter Path oder ein relativer Path?