O que exatamente é dot dot (..)? Por que seu comportamento é diferente com links simbólicos?

14

Estou tentando entender a natureza de .. (ponto duplo). Parece apontar para alvos diferentes 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 por meio do link simbólico, /outer/inner/.. leva a /outer/ . Parece que há dois .. diferentes aqui.

O que é .. exatamente? link simbólico? link duro? Ou é gerado dinamicamente dependendo do caminho quando o diretório é acessado? Ou talvez minha compreensão de links simbólicos esteja errada.

Editar:

Outra observação relacionada

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

Agora, se eu tentar acessar o arquivo através de /outer/inner/f , ele 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!?

    
por user98456 25.12.2016 / 13:07

2 respostas

34

.. é um link físico para o diretório pai que é criado como parte da entrada de diretório.

Se você emitir ls -ail em cada um desses diretórios, verá que as entradas a seguir têm o mesmo inode (primeiro campo) e a contagem de hard link (terceiro campo):

  • .. ao executar ls -ail em inner
  • . ao executar ls -ail em middle
  • middle ao executar ls -ail em outer

Now, /outer/middle/inner/.. leads to /outer/middle/, but if I access it through the symbolic link, /outer/inner/.. leads to /outer/. It seems that there are two different .. here.

Existe uma entrada .. em inner . Se o seu diretório de trabalho atual for outer , você deverá ver os mesmos resultados (uma listagem de diretório de middle ) de

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

A única situação em que "acessar" .. através do link simbólico deve fornecer comportamento diferente é se você cd into inner usando o link simbólico, para que seu diretório de trabalho lógico ( pwd -L ) difere do seu diretório de trabalho físico ( pwd -P ). Nesse caso, cd .. o levará de volta a outer não porque há uma entrada .. diferente, mas porque seu shell está acompanhando seu lógico diretório de trabalho e popping você fora de um nível, em vez de referenciar a entrada .. real em inner .

Essa é uma conveniência fornecida, por exemplo, bash como parte do comando cd interno. Você pode sobrescrever isso pedindo que mude para a entrada .. real com

cd -P ..

onde -P instrui cd (como em pwd acima) para usar o caminho físico.

    
por 25.12.2016 / 13:20
-2

Um diretório é uma lista de arquivos. Nessa lista, quase sempre há dois arquivos: . e .. . O primeiro é o próprio diretório (portanto, ele contém alguns dados sobre permissões de diretório) e o segundo é o diretório pai. Isso facilita a volta a diretórios preciosos, sem necessidade de redigitalizar a lista de diretórios.

Essas duas entradas são criadas na criação do diretório, junto com o nome do diretório e o link no diretório pai.

    
por 25.12.2016 / 13:19