何か追加する前に、新しいディレクトリのハードリンク数が2であるのはなぜですか?

何か追加する前に、新しいディレクトリのハードリンク数が2であるのはなぜですか?

newDirectoryディレクトリを作成し、ls -ldコマンドを実行するとします。ハードリンクの数は2つで確認されます。当初、ハードリンク2を正確に作成するものは何ですか?また、現在のディレクトリのサブディレクトリの数はハードリンクの数 - 2と同じですか?

ベストアンサー1

歴史の中、最初のUnixファイルシステムは、各ディレクトリに2つのエントリを作成しました。.ディレクトリ自体を指すエントリと..親ディレクトリを指すエントリです。これは、アプリケーションとオペレーティングシステム自体がファイルシステムを簡単にナビゲートする方法を提供します。

したがって、ディレクトリあたりのリンク数は2 + nです。ここで、nはサブディレクトリの数です。リンクは、親ディレクトリのディレクトリエントリ、ディレクトリ自体の.エントリ、および..各サブディレクトリのエントリです。たとえば、次がルートのサブツリー/parent、すべてのディレクトリの内容であるとします。

/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3

これでdirリンク数は5つです。つまり、dirの項目/parent.の項目、 、/parent/dirおよび の項目それぞれ 3 つです。サブディレクトリがないため、そのリンク数は2つです(のエントリとエントリ)。../parent/dir/sub1/parent/dir/sub2/parent/dir/sub3/parent/dir/sub1sub1/parent/dir./parent/dir/sub1

「適切な」親ディレクトリを持たないルートディレクトリの特殊な大文字と小文字の区別を最小限に抑えるために、ルートディレクトリには..自分を指すエントリが含まれています。したがって、対応するリンクの数は、2にサブディレクトリの数を加えた値です。ここで、2は/.合計です/..

最新のファイルシステムは、メモリの親ディレクトリを追跡する傾向があり、実際のエントリとしては必要ないか、存在しないことがよくあります...一般的な最新のUNIXシステムでは、.ファイル..システムの種類に関係なく、ファイルシステムコードの一部として特別な値として扱われます。一部のファイルシステムでは、ディスクに何も表示されない場合でも、エントリが含まれているか含まれているふりをして...ます。

ファイルシステム自体にエントリが含まれていても、..カーネルはまだ特殊なケースを処理する必要があります。マウントされたファイルシステムのルートディレクトリの名前付きエントリは、ディレクトリ自体を指します。ルートディレクトリがinode 2の場合、..ルートディレクトリのエントリ.とエントリは..すべてinode 2を指します。ただし、..そのディレクトリからのアクセスは実際にはマウントポイントの親ディレクトリにアクセスする必要があります/。つまり、/media/fooマウントポイントであると仮定すると、マウントされたファイルシステムがルートディレクトリにある場合でも、代わりに/media/foo/..指定する必要があります。エントリポイントはinode 2を指します。/media/media/foo../media/foo

.ほとんどのファイルシステムは、エントリが存在するかどうかに関係なく、ディレクトリ内のリンク数を2 + nとして報告しますが..、これを行わずにこの設定を変更するbtrfsなどの例外があります。拒否済みとマークされたアイデア内部にウィキペディア

おすすめ記事