「/」に「..」エントリがあるのはなぜですか?

「/」に「..」エントリがあるのはなぜですか?

これはいつも私を慌てた。ルートディレクトリに親ディレクトリへの参照が含まれているのはなぜですか?

bob@bob:/$ ls -a
。ホーム lib32 mnt .rpmdb sys vmlinuz ビルド
..cdrom initrd.img lib64 opt sbin tmp vmlinuz.old
bin dev initrd.img.old 紛失 + proc selinux usr 発見
起動など lib メディアルート srv var

私はファイルシステムでディレクトリがどのように管理されているかを理解しています。各ディレクトリには、それ自体へのn + 2ポインタがあります(n =ディレクトリ内のサブディレクトリの数)。各直接サブディレクトリに対して1つ、親ディレクトリに対して1つ、それ自体に対して1つずつ。

/しかし、その親は何ですか?

答え1

/..以下を指します/:

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

どちらも同じinode番号を持ち、このシステムでは正確に2です。 (正確な値は重要ではありません。)

これは一貫性のために行われます。これにより、カーネルがパス..内でaを処理するときに現在の場所を確認するためにカーネルにコードを追加する必要がなくなります。永遠だと言えますが、cd ..根より深くはありません。

答え2

これはUnixの保証のために存在します。すべてのディレクトリには2つのエントリが含まれています。.1 つは自分を指すエントリ、..もう 1 つは親ディレクトリを指すエントリです。

現在、名前空間のルートは..同じことを指すという点で特別です.が、プログラムに対するオペレーティングシステムの保証を破るほど特別ではありません。これらの契約が壊れると、状況は間違っており、誰もがお互いを非難します。

ディスク上のファイルシステムに表示されるルートディレクトリは、実際には異なる親ディレクトリを持つことができます。マウントされた名前空間に提供されるファイルシステムビューが強制されます.. = ./したがって、刑務所にいると、刑務所の外側の人々が見ても見ることchroot()ができます。/.. = //path/to/jail/../path/to

関連情報