Was genau ist dot dot (..)? Warum verhält es sich bei Symlinks anders?

14

Ich versuche die Natur von ..(Doppelpunkt) zu verstehen . Es scheint auf verschiedene Ziele zu verweisen, je nachdem, wie Sie darauf zugreifen.

Beispiel:-

    /outer/
        middle/
            inner/
        inner --> ./middle/inner/

Nun /outer/middle/inner/..führt zu /outer/middle/, aber wenn ich über den symbolischen Link darauf zugreife, /outer/inner/..führt zu /outer/. Es scheint, dass es hier zwei verschiedene ..gibt.

Was ist ..genau symbolischer Link? fester Link? Oder wird es je nach Pfad dynamisch generiert, wenn auf das Verzeichnis zugegriffen wird? Oder vielleicht ist mein Verständnis von symbolischen Verknüpfungen falsch.

Bearbeiten:

Andere verwandte Beobachtung

    /outer/
        middle/
            file
            inner/
               f --> ./../file
        inner --> ./middle/inner/

Nun, wenn ich versuche, auf die Datei zuzugreifen /outer/inner/f, funktioniert es. Aber es sollte nicht da /outer/inner/../filenicht auf eine Datei zeigen. Die Datei ist in /outer/middle/inner/... Dies scheint dem obigen Verhalten zu widersprechen !?

user98456
quelle
Beachten Sie, dass symbolische Links keine Verknüpfungen sind. Sie sind eher Zeiger.
wizzwizz4

Antworten:

34

..ist ein fester Link zum übergeordneten Verzeichnis, das als Teil des Verzeichniseintrags erstellt wird.

Wenn Sie ls -ailin jedem dieser Verzeichnisse Probleme verursachen, sollten Sie feststellen, dass die folgenden Einträge alle die gleiche inodeAnzahl (erstes Feld) und die gleiche Anzahl fester Verknüpfungen (drittes Feld) aufweisen:

  • ..bei der Ausführung ls -ailininner
  • .bei der Ausführung ls -ailinmiddle
  • middlebei der Ausführung ls -ailinouter

Nun führt / Outer / Middle / Inner / .. zu / Outer / Middle /, aber wenn ich über die symbolische Verknüpfung darauf zugreife, führt / Outer / Inner / .. zu / Outer /. Es scheint, dass es hier zwei verschiedene gibt.

Es gibt einen ..Eintrag in inner. Wenn Ihr aktuelles Arbeitsverzeichnis ist outer, sollten Sie die gleichen Ergebnisse (eine Verzeichnisliste von middle) aus sehen

  • ls -al inner/..
  • ls -al middle/inner/..

Die einzige Situation , in der „Zugriff“ ..durch die symbolische Verbindung sollte ein anderes Verhalten liefern, wenn Sie cdin innerden symbolischen Link verwenden, so dass Ihre logische Arbeitsverzeichnis ( pwd -L) unterscheidet sich von Ihrem physischen Arbeitsverzeichnis ( pwd -P). In diesem Fall cd ..werden Sie zurücknehmen outer nicht , weil es ein anderer ist ..Eintrag, sondern weil Ihre Schale ist der Überblick über Ihr halten logisches Arbeitsverzeichnis und Sie aus einer Ebene knallend, anstatt Referenzierung den tatsächlichen ..Eintrags in inner.

Dies ist eine Annehmlichkeit, die beispielsweise bashim Rahmen des eingebauten cdBefehls bereitgestellt wird . Sie können dies überschreiben, indem Sie ihn auffordern, zum aktuellen ..Eintrag mit zu wechseln

cd -P ..

where -Pweist cd(wie pwdoben) an, den physischen Pfad zu verwenden.

user4556274
quelle
Aha, die Verwirrung kommt von der Verwendung cd, um zu überprüfen. Korrigieren Sie mich also, wenn ich falsch liege, und zeigen Sie ..immer auf den physischen Elternteil. Wenn ein Symlink verwendet ..wird, wird er an den tatsächlichen (physischen) Elternteil weitergeleitet. Die Verwirrung besteht nur darin, cdin Verzeichnisse zu gelangen.
User98456
Dies erklärt auch das Sekundenverhalten. Vielen Dank.
User98456
3
@Theophrastus ls -laizeigt Ihnen, dass /..es sich um das Stammverzeichnis selbst handelt (auch bekannt als /. oder /). Sofern das Dateisystem nicht kaputt ist, sollte es keinen anderen Fall geben, in dem . == ..; selbst wenn eine fs irgendwo gemountet ist, wird sie ..vom (temporären) übergeordneten Element korrekt angezeigt (es ist ..also nicht nur ein einfacher statischer Eintrag in der Dateisystemtabelle erforderlich).
AnoE