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

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

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

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

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

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

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

решение1

ОтЧасто задаваемые вопросы по Bash E10:

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

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

Я полагаю, это сделано для исторической совместимости. Определенные версии Unix и ранние сетевые файловые системы использовали пути в форме //hostname/path для доступа к 'path' на сервере 'hostname'.

решение2

«Это не ошибка, это фича!»

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

решение3

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

решение4

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

То, что вы видите в приглашении оболочки, является артефактом обработки PS1 в bash (см. раздел «ВЫПОЛНЕНИЕ ЗАПРОСОВ» на странице руководства bash).

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

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

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

Связанный контент