Carpeta raíz doble versus carpeta raíz única

Carpeta raíz doble versus carpeta raíz única

En mi máquina Linux, en bash, tengo acceso a una carpeta de "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 al de la raíz de barra única "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 de 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?

Respuesta1

DePreguntas frecuentes sobre Bash E10:

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

POSIX.2, en su descripción de 'cd', dice quetreso más barras diagonales iniciales pueden reemplazarse con una sola barra al canonizar el directorio de trabajo actual.

Supongo que esto es por compatibilidad histórica. Ciertas versiones de Unix y los primeros sistemas de archivos de red usaban rutas del formato //nombre de host/ruta para acceder a la 'ruta' en el 'nombre de host' del servidor.

Respuesta2

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

Todavía estás en el mismo directorio raíz. No conozco los orígenes de esto, pero sospecho que puede tener algo que ver con la construcción de cadenas para rutas absolutas. Si alguien más lo sabe con seguridad, que hable.

Respuesta3

Las herramientas que ha utilizado simplemente ignoran las barras diagonales múltiples y siempre accede a la misma carpeta raíz.

Respuesta4

Las barras diagonales múltiples se tratan como una sola barra para propósitos de resolución de nombres de rutas.

Lo que está viendo en el símbolo del shell es un artefacto del manejo de bash PS1 (consulte la sección "INFORMACIÓ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 sólo cuestión de presentación; siempre estás en el mismo directorio raíz. Puedes comprobar 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 diagonales equivalen a "/".

información relacionada