为什么“/”有一个“..”条目?

为什么“/”有一个“..”条目?

这一直令我困惑。为什么根目录包含对父目录的引用?

bob@bob:/$ ls -a
。构建 home lib32 mnt .rpmdb sys vmlinuz
..cdrom initrd.img lib64 opt sbin tmp vmlinuz.old
bin dev initrd.img.old 丢失+找到 proc selinux usr
启动等 lib media root srv var

我了解文件系统中如何管理目录 - 每个目录都有 n+2 个指向自身的指针(n = 目录内的子目录数)。一个用于每个直接子目录,一个用于其父目录,一个用于其自身。

/但是的父级是什么?

答案1

/..指着/

$ ls -id /
2 /
$ ls -id /..
2 /..

两者具有相同的 inode 编号,在该系统上恰好为 2。 (确切的值并不重要。)

这样做是为了保持一致性。这样,当内核处理..路径中的a 时,就不必在内核中添加代码来检查它当前所在的位置。你可以说cd ..永远,但永远不会比根更深。

答案2

它之所以存在,是因为它是 Unix 做出的保证:每个目录都包含两个条目,.一个指向自身,..另一个指向父目录。

当前命名空间的根目录很特殊,它..指向与 相同的东西.,但没有那么特殊到破坏操作系统对程序的保证。当这些合同被打破时,事情就会出错,每个人都会互相指责。

在磁盘上的文件系统中,您看到的根目录实际上可能有一个不同的父目录。已安装命名空间中提供的文件系统视图是强制.. = .执行/.因此,如果你在chroot()监狱里,你会看到,/.. = /即使监狱外的人/path/to/jail/..会看到/path/to

相关内容