Carpeta raíz doble frente a carpeta raíz única

14

En mi caja de Linux, en bash, tengo acceso a una carpeta "doble raíz" indicada por dos barras diagonales:

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

El contenido de la carpeta y su subcarpeta es idéntico a la raíz de barra simple "normal". La doble barra no desaparece cuando accedo a sus subcarpetas. La anomalía no se repite con tres o más barras; Estos son sinónimos simples para la raíz:

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

¿Que tipo de lugar es este? ¿Es un error? ¿Alguien puede explicar la anomalía?

Tomás
fuente
buena pregunta: noté el mismo comportamiento pero nunca pregunté por qué sucede esto.
lajuette

Respuestas:

18

De Bash FAQ E10 :

E10) ¿Por qué 'cd //' deja $ PWD como '//'?

POSIX.2, en su descripción de 'cd', dice que tres o más barras inclinadas pueden reemplazarse con una barra oblicua al canonizar el directorio de trabajo actual.

Esto es, supongo, por compatibilidad histórica. Ciertas versiones de Unix, y los primeros sistemas de archivos de red, usaban rutas de la forma // nombre de host / ruta para acceder a 'ruta' en el servidor 'nombre de host'.

Pausado hasta nuevo aviso.
fuente
1
El dominio / sistema operativo es uno de esos sistemas.
user1686
1
La cosa de doble barra todavía se usa. Es parte de la Convención de nomenclatura universal (o uniforme; parece que no puedo encontrar una fuente primaria) o UNC. Aparece en Windows, Unix y Linux. Resulta ser la razón por la que se usa una barra doble en las URL.
Isaac Rabinovitch
1

"¡No es un error, es una característica!"

Todavía estás en el mismo directorio raíz. No sé los orígenes de esto, pero sospecho que puede tener algo que ver con la construcción de cadenas para caminos absolutos. Si alguien más lo sabe con certeza, contacte.

MBraedley
fuente
0

Las herramientas que ha utilizado ignoran varias barras inclinadas y siempre está llegando a la misma carpeta raíz.

ocsid80
fuente
Entonces, ¿por qué bash cambia /// en / mientras deja // como está?
Tomás
0

Las barras inclinadas múltiples se tratan como una barra inclinada simple con fines de resolución de nombres de ruta.

Lo que está viendo en el indicador de comandos de shell es un artefacto del manejo de bash PS1 (consulte la sección "PROMOCIÓN" en la página de manual de bash).

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

El resultado es solo una cuestión de presentación; siempre estás en el mismo directorio raíz. Puede verificar esto mirando /proc/$$/root.

[editar] Bueno, nunca supe esto: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 El significado de "//" no está definido por los estándares, pero "///" y más barras son equivalentes a "/".

Phil
fuente