在 / 处 cd .. 之后,为什么我们还在 /?
例子:
pradeep@pradeep-laptop:/> cd ..
pradeep@pradeep-laptop:/>
这种行为有什么具体原因吗?
答案1
根目录中有一个“.”和一个“..”条目,每个条目的 inode 编号相同。传统上,inode 编号为 2;在 MacOS X、Linux、Solaris 上仍然如此。因此,当您执行“cd /; cd ..”时,您最终会到达相同的位置。
在 20 世纪 80 年代,有一个名为 Newcastle Connection 的系统,它将联网计算机视为本地计算机根目录之上。因此,在这样的机器上,您可以输入:
cd /../othermachine/path/to/interesting/place
将目录更改为远程文件系统。
(您可以通过谷歌搜索“Newcastle Connection”找到该报纸 -网址很难解决。
答案2
该cd ..
命令将带您进入目录结构的上一层。由于您已经处于最高层,因此它只会将您留在根目录中。
答案3
是的,POSIX 标准中描述了此行为chroot
:
根目录中的点点条目被解释为根目录本身。因此,点点不能用于访问以根目录为根的子树之外的文件。
https://pubs.opengroup.org/onlinepubs/7908799/xsh/chroot.html
更详细的内容见“路径名解析”:
文件名点点相对于根目录的引用是实现定义的。在版本 7 中,它引用根目录本身;这是 POSIX.1-2008 中提到的行为。在某些联网系统中,构造/../主机名/用于引用另一台主机的根目录,POSIX.1 允许这种行为。
https://pubs.opengroup.org/onlinepubs/9699919799.2016edition/xrat/V4_xbd_chap04.html
虽然抛出错误似乎更合乎逻辑,但这种行为允许所有目录被相同对待,而不必将根目录视为特例。