Filesystems

為什麼“/”有一個“..”條目?

  • August 29, 2016

這一直讓我感到困惑。為什麼根目錄包含對父目錄的引用?

鮑勃@鮑勃:/$ ls -a
. 建構首頁 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 = 目錄內的子目錄數)。一個用於每個直接子目錄,一個用於其父目錄,一個用於自身。

但是什麼是/父母?

/..指向/

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

兩者都有相同的 inode 編號,在這個系統上恰好是 2。(確切的值無關緊要。)

這樣做是為了保持一致性。..這樣,當它在路徑中處理 a 時,核心中不必有程式碼來檢查它目前的位置。你可以說cd ..永遠,永遠不會比根源更深。

它之所以存在是因為它是 Unix 做出的保證:每個目錄都包含兩個條目,.一個指向自身,..另一個指向父級。

目前命名空間的根目錄是特殊的,它與 ...指向相同的東西.,但並沒有特別到破壞作業系統對程序的保證。當這些契約被打破時,事情就會出錯,每個人都會互相指責。

您在磁碟上的文件系統中看到的根目錄實際上可能具有不同的父目錄。掛載命名空間中提供的文件系統視圖是強制.. = .執行/. 所以如果你在chroot()監獄裡,你會看到,/.. = /即使監獄外面的人/path/to/jail/..會看到/path/to

引用自:https://unix.stackexchange.com/questions/5711