「..」は本当にハードリンクですか?

「..」は本当にハードリンクですか?

これは少し理論的な質問ですが、物事に適切な名前を使用することが重要です。

UNIX/Linux ファイルシステムでは、..親ディレクトリを指します。

しかし、我々は知っているハードリンクはディレクトリを指すことはできません。これは、ファイルシステムの非循環グラフ構造を破壊し、命令が無限ループで実行される可能性があるためです。

したがって、これは..実際にはハードリンクです(良い.)?これは、ディレクトリによって制限されず、あらゆる目的でハードリンクのように機能する特別な種類のハードリンクになります。

それともファイルシステムにハードコードされた特殊なinodeマッピングなので、ハードリンクと呼ぶべきではありませんか?

ベストアンサー1

ファイルシステムによって異なります。ほとんどのファイルシステムは伝統的なUnixデザインに従います。ここで...はハードリンクです。つまり、ファイルシステムの物理ディレクトリエントリです。ディレクトリのハードリンク数は 2+n です。ここで、nはサブディレクトリの数、つまりディレクトリの親ディレクトリのエントリ、ディレクトリ自体の.エントリ、および各サブディレクトリのエントリです..。ハードリンクの数は、ディレクトリが作成、削除、またはディレクトリの内外に移動するたびに更新されます。バラより何か追加する前に、新しいディレクトリのハードリンク数が2であるのはなぜですか?より詳細な説明が必要です。

一部のファイルシステムはこれらの伝統から逸脱しています。特にBTFS

私たちはハードリンクがディレクトリを指すことができないことを知っています。

これは不正確な表現です。より正確には、lnユーティリティやシステムコールなどを使用してlinkディレクトリへのハードリンクを作成することはできません。カーネルがこれを防ぐからです。呼び出しは、mkdir新しいディレクトリの親ディレクトリへのハードリンクを生成します。これは、ファイルシステムのディレクトリへの新しいハードリンクを作成する唯一の方法です。逆に、ディレクトリを削除することは、ディレクトリへのハードリンクを削除する唯一の方法です。

また、ハードリンクがメインファイルを「指す」と考えるのは誤解を招く可能性があることに注意してください。シンボリックリンクとは異なり、ハードリンクは方向付けられません。ファイルに複数のハードリンクがある場合、そのリンクは同じです。次の順序を実行した後:

mkdir a b
touch a/file
ln a/file b/file

ファイルシステムのどれもb/file補助ファイルにすることはできませんa/file。両方のディレクトリエントリは同じファイルを参照します。それらはすべてファイルへのハードリンクです。

おすすめ記事