Estou tentando entender a natureza de ..
(ponto duplo). Parece apontar para diferentes alvos, dependendo de como você o acessa.
Exemplo:-
/outer/
middle/
inner/
inner --> ./middle/inner/
Agora, /outer/middle/inner/..
leva a /outer/middle/
, mas se eu acessá-lo através do link simbólico, /outer/inner/..
leva a /outer/
. Parece que existem dois diferentes ..
aqui.
O que é ..
exatamente? link simbólico? link rígido? Ou é gerado dinamicamente, dependendo do caminho quando o diretório é acessado? Ou talvez meu entendimento dos links simbólicos esteja errado.
Editar:
Outra observação relacionada
/outer/
middle/
file
inner/
f --> ./../file
inner --> ./middle/inner/
Agora, se eu tentar acessar o arquivo através /outer/inner/f
dele, funciona. Mas não deve, pois /outer/inner/../file
não aponta para um arquivo. o arquivo está em /outer/middle/inner/..
. Isso parece contradizer o comportamento acima !?
fonte
Respostas:
..
é um link físico para o diretório pai, criado como parte da entrada do diretório.Se você emitir
ls -ail
em cada um desses diretórios, verá que as seguintes entradas têm todas a mesmainode
(primeiro campo) e contagem de links físicos (terceiro campo):..
ao executarls -ail
eminner
.
ao executarls -ail
emmiddle
middle
ao executarls -ail
emouter
Há uma
..
entrada eminner
. Se o seu diretório de trabalho atual forouter
, você verá os mesmos resultados (uma lista de diretóriosmiddle
) dels -al inner/..
ls -al middle/inner/..
A única situação em que "acessar"
..
através do link simbólico deve fornecer um comportamento diferente é se vocêcd
parainner
usando o link simbólico, de modo que sua lógica de diretório de trabalho (pwd -L
) difere do seu físico diretório de trabalho (pwd -P
). Nesse caso,cd ..
você voltaráouter
não porque existe uma..
entrada diferente , mas porque seu shell está acompanhando seu diretório de trabalho lógico e exibindo um nível, em vez de fazer referência à..
entrada realinner
.Essa é uma conveniência fornecida por, por exemplo,
bash
como parte docd
comando interno. Você pode substituir isso pedindo que ele mude para a..
entrada real comonde
-P
instruicd
(comopwd
acima) a usar o caminho físico.fonte
cd
para verificar. Portanto, corrija-me se estiver errado,..
sempre aponte para o pai físico. Se um link simbólico usa,..
ele será direcionado ao pai (físico) real. A confusão acontece apenas comcd
a entrada em diretórios.ls -lai
mostra que/..
é o próprio diretório raiz novamente (aka/.
ou/
). A menos que o sistema de arquivos esteja quebrado, não deve haver outro caso em que. == ..
; mesmo quando um fs é montado em algum lugar, ele obtém o correto..
do pai (temporário) (para que haja alguma mágica acontecendo lá,..
não é apenas uma entrada estática simples na tabela do sistema de arquivos).