Двойная корневая папка против одной корневой папки


14

На моем компьютере с Linux в bash у меня есть доступ к папке «двойной корень», обозначенной двумя косыми чертами:

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

Содержимое папки и ее подпапки идентично «обычному» корню с одним слешем. Двойная косая черта не исчезает, когда я открываю подпапки. Аномалия не повторяется с тремя или более косыми чертами; это простые синонимы для корня:

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

Что это за место такое? Это ошибка? Кто-нибудь может объяснить аномалию?


Хороший вопрос - я заметил такое же поведение, но никогда не спрашивал, почему это происходит.
lajuette

Ответы:


18

Из Bash FAQ E10 :

E10) Почему «cd //» оставляет $ PWD как «//»?

POSIX.2 в своем описании 'cd' говорит, что три или более начальных слеша могут быть заменены одним слешем при канонизации текущего рабочего каталога.

Это, я полагаю, для исторической совместимости. Некоторые версии Unix и ранние сетевые файловые системы использовали пути в форме // имя хоста / путь для доступа к «пути» на сервере «имя хоста».


1
Домен / ОС является одной из таких систем.
user1686

1
Двойная косая черта все еще используется. Это часть Универсального (или Единого; я не могу найти первоисточника) Соглашения об именах или UNC. Появляется в Windows, Unix и Linux. Это происходит по той причине, что в URL используется двойной слеш.
Исаак Рабинович

1

«Это не ошибка, это особенность!»

Вы все еще в том же корневом каталоге. Я не знаю происхождение этого, но подозреваю, что это может иметь какое-то отношение к созданию строк для абсолютных путей. Если кто-то еще знает наверняка, подайте трубку.


0

Множественные слэши просто игнорируются используемыми вами инструментами, и вы всегда получаете доступ к одной и той же корневой папке.


Так почему bash меняется /// на /, оставляя // как есть?
Томас

0

Несколько косых черт рассматриваются как одна косая черта в целях разрешения имен путей.

В приглашении оболочки вы видите артефакт обработки bash PS1 (см. Раздел «ПРЕДУПРЕЖДЕНИЕ» на странице руководства bash).

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

Результат - только вопрос представления; Вы всегда находитесь в одном корневом каталоге. Вы можете проверить это, посмотрев на /proc/$$/root.

[edit] Ну, я никогда не знал этого: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 Значение «//» не определено стандартами, но «///» и больше косых черт эквивалентно "/".

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.