Che cos'è esattamente il punto punto (..)? Perché il suo comportamento è diverso con i symlink?


15

Sto cercando di capire la natura di ..(punto doppio). Sembra indicare obiettivi diversi a seconda di come accedervi.

Esempio:-

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

Ora, /outer/middle/inner/..conduce a /outer/middle/, ma se accedo tramite il collegamento simbolico, /outer/inner/..porta a /outer/. Sembra che ci siano due diversi ..qui.

Che cosa è ..esattamente? link simbolico? collegamento reale? O viene generato dinamicamente in base al percorso quando si accede alla directory? O forse la mia comprensione dei collegamenti simbolici è sbagliata.

Modificare:

Altre osservazioni correlate

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

Ora se provo ad accedere al file tramite /outer/inner/fesso funziona. Ma non dovrebbe dal momento /outer/inner/../fileche non punta a un file. il file è in /outer/middle/inner/... Questo sembra contraddire il comportamento sopra !?


Nota che i collegamenti simbolici non sono scorciatoie; sono più come puntatori.
wizzwizz4,

Risposte:


35

..è un collegamento reale alla directory principale che viene creata come parte della voce della directory.

Se emetti ls -ailin ognuna di queste directory, dovresti vedere che le seguenti voci hanno tutte lo stesso inode(primo campo) e conteggio hard link (terzo campo):

  • ..durante l'esecuzione ls -ailininner
  • .durante l'esecuzione ls -ailinmiddle
  • middledurante l'esecuzione ls -ailinouter

Ora, / external / middle / inner / .. porta a / external / middle /, ma se accedo tramite il collegamento simbolico, / external / inner / .. conduce a / external /. Sembra che ci siano due diversi ... qui.

C'è una ..voce in inner. Se la tua attuale directory di lavoro è outer, dovresti vedere gli stessi risultati (un elenco di directory di middle) da

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

L'unica situazione in cui "l'accesso" ..attraverso il collegamento simbolico dovrebbe fornire un comportamento diverso è se si cdin innerutilizzando il collegamento simbolico, in modo che la vostra logica di directory di lavoro ( pwd -L) differisce dal vostro fisico directory di lavoro ( pwd -P). In questo caso, cd ..ti riporterà outer non perché c'è una ..voce diversa , ma perché la tua shell sta tenendo traccia della tua directory di lavoro logica e ti fa uscire di un livello, piuttosto che fare riferimento alla ..voce effettiva in inner.

Questa è una comodità fornita, ad esempio, bashcome parte del cdcomando integrato . Puoi ignorarlo chiedendogli di passare alla ..voce effettiva con

cd -P ..

dove -Pindica cd(come pwdsopra) di usare il percorso fisico.


Ah, la confusione deriva dall'uso cdper controllare. Quindi, correggimi se sbaglio, ..indica sempre il genitore fisico, se un collegamento simbolico lo utilizza ..verrà indirizzato al genitore (fisico) effettivo. La confusione si manifesta solo con l' cding in directory.
user98456,

Questo spiega anche il comportamento dei secondi. Grazie mille.
user98456,

3
@Theophrastus, ls -laiti mostra che /..è la directory root stessa, di nuovo (aka /. o /). A meno che il file system non sia rotto, non ci dovrebbero essere altri casi in cui . == ..; anche quando un fs è montato da qualche parte, ottiene il ..genitore (temporaneo) corretto (quindi c'è un po 'di magia in corso lì, ..non è solo una semplice voce statica nella tabella del file system).
AnoE
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.