Linuxでフォルダ/ディレクトリを作成するときに、リンク値 "2"の後に隠されたロジックを初めて理解するのに役立つ人はいますか?
たくさん検索しましたが、満足のいくロジックが見つかりませんでした。
ベストアンサー1
Unixファイルシステムの基本設計は初期にさかのぼります。これは論文で説明されています。UNIX時間共有システム著者: Dennis M. RichおよびKen Thompson。
デザイナーは現在のディレクトリを参照し、ディレクトリから親ディレクトリに移動する方法を望んでいました。特別なシェル構文を導入する代わりに、彼らはすでに存在する機能を使用することにしました。つまり、ディレクトリには別のディレクトリのエントリを含めることができるため、特別な名前を持つアイテムは常にディレクトリ自体を指し、.
特別な名前を持つアイテムは常にディレクトリ自体を指すことにしました。ディレクトリ自体。 nameは..
常にディレクトリの親ディレクトリを指します。たとえば、ルートディレクトリにサブディレクトリが含まれている場合、エントリはfoo
ルートディレクトリを指し、エントリは自分を指します。foo
..
foo
.
foo
したがって、サブディレクトリがないディレクトリの場合、ディレクトリのリンク数(ディレクトリを指すディレクトリエントリの数)は常に2です。つまり、親ディレクトリの見積もりにディレクトリを追加した値です.
。各サブディレクトリには、各エントリに対して1ずつ増加するリンク数があります..
。
特殊項目.
は、..
最初にmkdir
ファイルシステムのディスク表現を使用して直接クリーンアップするコマンドによって生成されます。その後、システムはそれをカーネルに移動しました。今日、多くのファイルシステムにはディスク表現エントリが含まれなくなりました.
。..
ファイルシステムドライバはそれを必要とせず、ディレクトリの親ディレクトリの場所を常に覚えておく必要はありません(これはメモリ消費をわずかに増やし、今日の標準では無視できますが、1970年代の標準ではそうではありません).
。..
ディスク.
と..
エントリを含むファイルシステムでは、ファイルシステムドライバはこれらのエントリが常に存在することを確認します。ディスク表現にこれらのエントリが含まれていないファイルシステムでは、ファイルシステムドライバはこれらのエントリが存在するかのように偽装します。