ディレクトリnewDirectoryを作成してから、ls-ldコマンドを実行するとします。ハードリンクの数が2であることがわかります。最初からハードリンク2を正確に構成しているのは何ですか?また、現在のディレクトリ内のサブディレクトリの数は、ハードリンクの数– 2に等しいですか?
承認された回答:
歴史的に、最初のUnixファイルシステムはすべてのディレクトリに.
という2つのエントリを作成していました。 ディレクトリ自体を指し、..
その親を指しています。これにより、アプリケーションとOS自体の両方でファイルシステムを簡単にトラバースできます。
したがって、各ディレクトリのリンク数は2 + nです。ここで、nはサブディレクトリの数です。リンクは、その親であるディレクトリ自体の.
にあるそのディレクトリのエントリです。 エントリ、および..
各サブディレクトリのエントリ。たとえば、これが/parent
をルートとするサブツリーのコンテンツであるとします。 、すべてのディレクトリ:
/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3
次に、dir
リンク数は5です:dir
/parent
のエントリ 、.
/parent/dir
のエントリ 、および3つの..
各/parent/dir/sub1
のエントリ 、/parent/dir/sub2
および/parent/dir/sub3
。 /parent/dir/sub1
以降 サブディレクトリがなく、リンク数は2(sub1
/parent/dir
のエントリ および.
/parent/dir/sub1
のエントリ 。
「適切な」親を持たないルートディレクトリの特殊な大文字小文字の区別を最小限に抑えるために、ルートディレクトリには..
が含まれています。 自分自身を指すエントリ。このように、リンク数は2にサブディレクトリの数を加えたものになり、2は/.
になります。 および/..
。
それ以降のファイルシステムは、メモリ内の親ディレクトリを追跡する傾向があり、通常は.
および..
実際のエントリとして存在する。典型的な最新のUNIXシステムは.
および..
ファイルシステムタイプに依存しないファイルシステムコードの一部としての特別な値として。一部のファイルシステムには、まだ.
および..
エントリ、またはディスクに何も表示されていない場合でもふりをします。
ほとんどのファイルシステムは、.
であるかどうかに関係なく、ディレクトリのリンク数2+nを報告します。 および..
エントリは存在しますが、例外があります。たとえば、btrfsはこれを行いません。