Como o cd .. sabe qual diretório é ..?

6

Os drectors contêm . e .. , que são links físicos para o diretório atual e pai.

Então, como o shell sabe, por exemplo, no prompt, que o diretório atual é chamado "a" em cd a/path/.. ? Tem invólucro especial para isso?

Caso contrário, não está entrando em um diretório chamado .. , em vez de saber que esse diretório também é o diretório acima? Como sabe o nome?

    
por James 07.05.2015 / 13:45

2 respostas

4

Eu suponho que sua pergunta é como o bash pode saber mudar o diretório para que o diretório de trabalho seja foo (em vez de foo/bar/.. ) em cd foo/bar/.. .

Embora esses dois caminhos sejam representados pelo mesmo inode (a menos que haja links simbólicos presentes no caminho, conforme mostrado no final desta resposta), o shell precisa tomar medidas especiais para mostrar o nome do diretório atual como foo , em vez de .. . Em bash , quando cd encontra .. no caminho, internamente apenas retira o diretório pai, significando que .. nunca pode ser o nome do diretório.

Isso está documentado em help cd :

.. is processed by removing the immediately previous pathname component back to a slash or the beginning of DIR.

Esse caso especial resulta no seguinte comportamento interessante (observe que foo/qux/.. ainda foi resolvido para foo , mesmo quando o caminho real era bar/baz/.. ):

$ tree
.
|-- bar
|   '-- baz
'-- foo

3 directories, 0 files
$ ln -s "$(readlink -f bar/baz)" foo/qux
$ tree
.
|-- bar
|   '-- baz
'-- foo
    '-- qux -> bar/baz

4 directories, 0 files
$ cd foo/qux/..
$ basename "$(pwd)"
foo
    
por 07.05.2015 / 15:24
1

Como você disse, .. é um link físico para o diretório pai. O shell não precisa saber o nome do diretório ao acessar .. ; simplesmente acessa o diretório através do inode.

Um inode é uma estrutura que armazena todos os metadados do arquivo (ou diretório), exceto o nome do arquivo: tipo, permissões, proprietário, grupo, tamanho, tempos de acesso / alteração / modificação / exclusão, número de links, atributos, ACLs e endereço onde o conteúdo real do arquivo (ou seja, os dados) é armazenado.

    
por 07.05.2015 / 14:45

Tags