Nat*_*man 84 filesystems directory directory-structure
这一直困扰着我。为什么根目录包含对父目录的引用?
bob@bob:/$ ls -a . 构建 home lib32 mnt .rpmdb sys vmlinuz .. cdrom initrd.img lib64 opt sbin tmp vmlinuz.old bin dev initrd.img.old lost+found proc selinux usr 引导等 lib 媒体根 srv var
我了解如何在文件系统中管理目录 - 每个目录都有 n+2 个指向自身的指针(n = 目录内的子目录数)。一个用于每个直接子目录,一个用于其父目录,一个用于其自身。
但是什么是/父母?
War*_*ung 73
/..指向/:
$ ls -id /
2 /
$ ls -id /..
2 /..
Run Code Online (Sandbox Code Playgroud)
两者都有相同的 inode 编号,在这个系统上恰好是 2。(确切的值并不重要。)
这样做是为了一致性。这样,当内核处理..路径中的 a时,内核中不必有代码来检查它当前的位置。你可以说cd ..永远,永远不要比根更深。
Phi*_*l P 39
它在那里是因为它是 Unix 的保证:每个目录都包含两个条目,.一个指向它自己,..另一个指向父目录。
当前命名空间的根目录比较特殊,与..指向同一个东西.,但又不那么特殊,破坏了操作系统对程序的保证。当这些合同被打破时,事情就会出错,每个人都指责。
您看到的根目录,在磁盘文件系统中,实际上可能有一个不同的父目录。在所提供的文件系统的视图安装命名空间是什么强制执行.. = .的规则/。所以如果你在chroot()监狱里,你会看到,/.. = /即使监狱外的人/path/to/jail/..会看到/path/to。