Dossier racine double vs dossier racine simple


14

Sur ma box Linux, en bash, j'ai accès à un dossier "double root" indiqué par deux barres obliques:

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

Le contenu du dossier et de son sous-dossier est identique à la racine simple barre oblique "normale". La double barre oblique ne disparaît pas lorsque j'accède à ses sous-dossiers. L'anomalie ne se répète pas avec trois barres obliques ou plus; ce sont des synonymes simples pour la racine:

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

C'est quel genre d'endroit? Est-ce un bug? Quelqu'un peut-il expliquer cette anomalie?


bonne question - j'ai remarqué le même comportement mais je n'ai jamais demandé pourquoi cela se produit.
lajuette

Réponses:


18

De la FAQ Bash E10 :

E10) Pourquoi 'cd //' laisse-t-il $ PWD '//'?

POSIX.2, dans sa description de «cd», indique que trois barres obliques ou plus peuvent être remplacées par une seule barre oblique lors de la canonisation du répertoire de travail actuel.

C'est, je présume, pour la compatibilité historique. Certaines versions d'Unix, et les premiers systèmes de fichiers réseau, utilisaient des chemins d'accès de la forme // hostname / path pour accéder à 'path' sur le serveur 'hostname'.


1
Le domaine / OS est l'un de ces systèmes.
user1686

1
La double barre oblique est toujours utilisée. Cela fait partie de la convention de dénomination universelle (ou UNC). Il apparaît sous Windows, Unix et Linux. Il se trouve que c'est la raison pour laquelle une double barre oblique est utilisée dans les URL.
Isaac Rabinovitch

1

"Ce n'est pas un bug, c'est une fonctionnalité!"

Vous êtes toujours dans le même répertoire racine. Je ne connais pas l'origine de cela, mais je soupçonne que cela peut avoir quelque chose à voir avec la construction de chaînes pour des chemins absolus. Si quelqu'un d'autre le sait, lancez-vous.


0

Les barres obliques multiples sont simplement ignorées par les outils que vous avez utilisés et vous obtenez toujours le même dossier racine.


Alors pourquoi bash change /// en / tout en laissant // tel quel?
Tomas

0

Plusieurs barres obliques sont traitées comme une seule barre oblique à des fins de résolution de chemin.

Ce que vous voyez dans l'invite du shell est un artefact de la gestion de bash PS1 (voir la section "PROMPTION" dans la page de manuel de bash).

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

Le résultat n'est qu'une question de présentation; vous êtes toujours dans le même répertoire racine. Vous pouvez vérifier cela en regardant /proc/$$/root.

[modifier] Eh bien, je ne l'ai jamais su: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 La signification de "//" n'est pas définie par les normes, mais "///" et plusieurs barres obliques équivalent à "/".

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.