问题描述
我错误地输入了 cd //
而不是 cd /
。令我惊讶的是,当前目录显示为 //
。
那个目录是什么?它为什么存在?
apple@snipped $ pwd
/home/apple
apple@snipped $ cd /
apple@snipped $ pwd
/
apple@snipped $ cd //
apple@snipped $ pwd
//
apple@snipped $ cd ///
apple@snipped $ pwd
/
最佳方案
//
通常与 /
相同。 ///
必须与 /
相同。
ls
会向您显示 cd //
将您带到根目录,与 cd /
相同。
$ cd /
$ ls
bin
boot
dev
...
$ cd //
$ ls
(same as above)
确认它们绝对是同一目录的技术方法是:
$ cd /
$ stat -c "%i" .
2
$ cd //
$ stat -c "%i" .
2
它们将打印相同的 inode 编号,这意味着它们是相同的。
血腥的细节记录在 POSIX Pathname Resolution specification 中:
A pathname consisting of a single slash shall resolve to the root directory of the process. A null pathname shall not be successfully resolved. A pathname that begins with two successive slashes may be interpreted in an implementation-defined manner, although more than two leading slashes shall be treated as a single slash.