it-swarm-pt.tech

Por que '/' tem uma entrada '..'?

Isso sempre me intrigou. Por que o diretório raiz contém uma referência a um diretório pai?

 bob @ bob:/$ ls -a 
. build home lib32 mnt .rpmdb sys vmlinuz 
 .. cdrom initrd.img lib64 opt sbin tmp vmlinuz.old 
 bin dev initrd.img.old perdido + encontrado proc selinux usr 
 boot etc lib media root srv var 

Eu entendo como os diretórios são gerenciados no sistema de arquivos - cada diretório tem n + 2 ponteiros para si mesmo (n = número de subdiretórios dentro do diretório). Um para cada subdiretório imediato, um para seu pai e um para si mesmo.

Mas qual é o pai de /?

81
Nathan Osman

/.. aponta para /:

$ ls -id /
2 /
$ ls -id /..
2 /..

Ambos têm o mesmo número de inode, que por acaso é 2 neste sistema. (O valor exato não importa.)

É feito para consistência. Dessa forma, não é necessário haver código no kernel para verificar onde ele está atualmente quando processa um .. em um caminho. Você pode dizer cd .. para sempre, e nunca vá além da raiz.

72
Warren Young

Está lá porque é uma garantia feita pelo Unix: cada diretório contém duas entradas, . Que se refere a si mesmo, e .. Que se refere ao pai.

O diretório raiz do namespace atual é especial, pois .. Aponta para a mesma coisa que ., Mas não tão especial para quebrar a garantia feita pelo sistema operacional aos programas. Quando esses contratos são quebrados, as coisas dão errado e todos apontam o dedo.

O diretório raiz que você vê pode, no sistema de arquivos no disco, na verdade ter um diretório pai diferente. A visão dos sistemas de arquivos fornecidos no namespace montado é o que impõe a regra .. = . Para /. Portanto, se você estiver em uma chroot() prisão, verá /.. = / Mesmo que alguém de fora da prisão olhando para /path/to/jail/.. Verá /path/to.

38
Phil P