Angenommen, Sie haben Verzeichnisse /dir1und /dir2/linked, wobei letzteres ein Symlink zu ersteren ist.
Wenn Sie cdzu linkedund pwd, erhalten Sie die Ausgabe /dir2/linked. Wenn Sie dann cd .., werden Sie angezogen /dir2. Dieses Verhalten steht im Einklang mit dem Konzept, dass Sie sich /dir2/linkedzuvor befinden. Soweit ich weiß, wird das übergeordnete Verzeichnis ( ..) eines Verzeichnisses im Verzeichnis inode gespeichert (dh physisch auf der Festplatte). Da dies /dir2/linkedwirklich /dir1der Fall ist , muss das übergeordnete Verzeichnis auf dem Inode offensichtlich sein/
Um die Sache weiter zu verkomplizieren, /dir2/linkedsind die Ausgänge von ls ..und cd .. ; ls .im Inneren unterschiedlich! Es scheint, als würde cdder symlinked Pfad geehrt, während lsder "physische" Pfad gewürdigt wird. Wie in dieser Frage erwähnt , gibt es cd -Pfür diesen Anwendungsfall jedoch.
man pwd erwähnt "physische" und "logische" Arbeitsverzeichnisse, aber ich habe an dieser Stelle noch einige Fragen:
- Wird dieses Verhalten immer von der
PWDUmgebungsvariablen bereitgestellt , wie in erwähntman pwd? - Warum standardmäßig
cdundlsunterschiedlich verhalten, wenn beide Shell-Befehle sind (dh keine Programme)? - Verwendet das typische Programm (kein Shell-Befehl)
PWDanstelle des physischen Pfads? Mir ist klar, dass es an der Implementierung liegt, aber gibt es eine Faustregel?