双根文件夹与单根文件夹

双根文件夹与单根文件夹

在我的 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:/ $

这是什么地方?是 bug 吗?有人能解释一下这个异常吗?

答案1

Bash 常见问题解答 E10

E10)为什么 'cd //' 会让 $PWD 保留为 '//'?

POSIX.2 在对 'cd' 的描述中说在规范化当前工作目录时,可以将多个前导斜杠替换为单个斜杠。

我推测这是为了历史兼容性。某些版本的 Unix 和早期的网络文件系统使用 //hostname/path 形式的路径来访问服务器“hostname”上的“path”。

答案2

“这不是一个错误,这是一个功能!”

您仍然在同一个根目录中。我不知道这是什么原因,但怀疑这可能与构建绝对路径的字符串有关。如果其他人知道确切原因,请告诉我。

答案3

您使用的工具会忽略多个斜杠,并且您始终会进入同一个根文件夹。

答案4

为了路径名解析的目的,多个斜杠将被视为单个斜杠。

您在 shell 提示符中看到的是 bash PS1 处理的产物(请参阅 bash 手册页中的“PROMPTING”部分)。

[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 标准没有定义“//”的含义,但是“///”和更多斜线等同于“/”。

相关内容