GNU/Linux >> Linux の 問題 >  >> Linux

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

ディレクトリ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はこれを行いません。


Linux
  1. ディレクトリハードリンクを強制的に作成しますか?

  2. `while Ifs =Read ..`で、なぜIfsは効果がないのですか?

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

  1. Cで新しいディレクトリを作成する

  2. ディレクトリへのリンクを作成する方法

  3. uniq が同一の単語を異なるものとしてカウントするのはなぜですか?

  1. `find よりも速いものはありますか? | | wc -l`ディレクトリ内のファイルをカウントするには?

  2. 新しいソフトウェアをインストールする前に echo を使用する理由

  3. PATH にあるプログラムに対して Bash が No such file or directory を与えるのはなぜですか?