フォルダのリンク値はデフォルトで 2 に設定されます。

フォルダのリンク値はデフォルトで 2 に設定されます。

Linuxでフォルダ/ディレクトリを作成するときに、リンク値 "2"の後に隠されたロジックを初めて理解するのに役立つ人はいますか?

ここに画像の説明を入力してください。

たくさん検索しましたが、満足のいくロジックが見つかりませんでした。

答え1

Unixファイルシステムの基本設計は初期にさかのぼります。これは論文で説明されています。UNIX時間共有システム著者: Dennis M. RichおよびKen Thompson。

デザイナーは現在のディレクトリを参照し、ディレクトリから親ディレクトリに移動する方法を望んでいました。特別なシェル構文を導入する代わりに、彼らはすでに存在する機能を使用することにしました。つまり、ディレクトリには別のディレクトリのエントリを含めることができるため、特別な名前を持つアイテムは常にディレクトリ自体を指し、.特別な名前を持つアイテムは常にディレクトリ自体を指すことにしました。ディレクトリ自体。 nameは..常にディレクトリの親ディレクトリを指します。たとえば、ルートディレクトリにサブディレクトリが含まれている場合、エントリはfooルートディレクトリを指し、エントリは自分を指します。foo..foo.foo

したがって、サブディレクトリがないディレクトリの場合、ディレクトリのリンク数(ディレクトリを指すディレクトリエントリの数)は常に2です。つまり、親ディレクトリの見積もりにディレクトリを追加した値です.。各サブディレクトリには、各エントリに対して1ずつ増加するリンク数があります..

特殊項目.は、..最初にmkdirファイルシステムのディスク表現を使用して直接クリーンアップするコマンドによって生成されます。その後、システムはそれをカーネルに移動しました。今日、多くのファイルシステムにはディスク表現エントリが含まれなくなりました...ファイルシステムドライバはそれを必要とせず、ディレクトリの親ディレクトリの場所を常に覚えておく必要はありません(これはメモリ消費をわずかに増やし、今日の標準では無視できますが、1970年代の標準ではそうではありません)...ディスク...エントリを含むファイルシステムでは、ファイルシステムドライバはこれらのエントリが常に存在することを確認します。ディスク表現にこれらのエントリが含まれていないファイルシステムでは、ファイルシステムドライバはこれらのエントリが存在するかのように偽装します。

答え2

ディレクトリあたりのリンク数は2つ以上です。

  1. 親ディレクトリからこのディレクトリへの参照
  2. ディレクトリの自己参照(.

例:一部のデフォルトディレクトリにディレクトリがあるとしますfoo

$ ls -i /basedir
1056868 foo
$ ls -ia /basedir/foo
1056868 .  1056849 ..

このlsオプションは、-iディレクトリエントリの inode 番号を表示します。このオプションは、-aドットで始まる項目を表示します(lsデフォルトでは表示されません)。同じinode番号がある/basedir/fooことに注意してください。/basedir/foo/.そのインデックスノードへの異なる参照が(少なくとも)2つあるため、そのインデックスノードのリンク数は2つ(またはそれ以上)です。

関連情報