Pasta raiz dupla vs pasta raiz única

14

Na minha caixa Linux, no bash, tenho acesso a uma pasta "raiz dupla" denotada por duas barras:

tomas:~ $ cd /
tomas:/ $ ls
bin/ cdrom@ ...
tomas:/ $ cd //
tomas:// $ ls 
bin/ cdrom@ ...

O conteúdo da pasta e sua subpasta é idêntico à raiz de barra única "normal". A barra dupla não desaparece quando eu acesso suas subpastas. A anomalia não se repete com três ou mais barras; estes são sinônimos simples para a raiz:

tomas:// $ cd home/tomas
tomas://home/tomas $ cd ///
tomas:/ $ cd ////
tomas:/ $

Que tipo de lugar é este? Isso é um bug? Alguém pode explicar a anomalia?

Tomas
fonte
boa pergunta - notei o mesmo comportamento, mas nunca perguntei por que isso acontece.
precisa saber é o seguinte

Respostas:

18

Do Bash FAQ E10 :

E10) Por que 'cd //' deixa $ PWD como '//'?

O POSIX.2, em sua descrição de 'cd', diz que três ou mais barras principais podem ser substituídas por uma única barra ao canonizar o diretório de trabalho atual.

Presumo que isto seja para compatibilidade histórica. Certas versões do Unix e sistemas de arquivos de rede anteriores usavam caminhos no formato // hostname / path para acessar 'path' no servidor 'hostname'.

Pausado até novo aviso.
fonte
1
O domínio / sistema operacional é um desses sistemas.
user1686
1
A coisa de barra dupla ainda é usada. Faz parte da Convenção de Nomenclatura Universal (ou Uniforme; não consigo encontrar uma fonte primária) ou UNC. Ele aparece no Windows, Unix e Linux. É o motivo pelo qual uma barra dupla é usada nos URLs.
Isaac Rabinovitch
1

"Isto não é um erro, é um recurso!"

Você ainda está no mesmo diretório raiz. Não sei as origens disso, mas suspeito que possa ter algo a ver com a construção de strings para caminhos absolutos. Se mais alguém souber ao certo, entre em contato.

MBraedley
fonte
0

Várias barras são apenas ignoradas pelas ferramentas que você usou e você sempre acessa a mesma pasta raiz.

ocsid80
fonte
Então, por que o bash muda /// para / enquanto deixa // como está?
Tomas
0

Várias barras são tratadas como uma única barra para fins de resolução do nome do caminho.

O que você vê no prompt do shell é um artefato do manuseio do bash PS1 (consulte a seção "PROMPTING" na página de manual do bash).

[root@linux /]# cd /    ; echo $PWD
/
[root@linux /]# cd //   ; echo $PWD
//
[root@linux //]# cd /// ; echo $PWD
/
[root@linux /]# cd //// ; echo $PWD
/

O resultado é apenas uma questão de apresentação; você está sempre no mesmo diretório raiz. Você pode verificar isso olhando para /proc/$$/root.

[edit] Bem, eu nunca soube disso: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 O significado de "//" permanece indefinido pelos padrões, mas "///" e mais barras são equivalentes a "/".

Phil
fonte