私はいくつかの情報源(例: this )から、次のことを学びました。
私が理解していないのは、ほとんど最後の行です。 iノードはiノードにアクセスしますが、iノードはファイルとは別のエンティティです。また、記載されている説明では、iノードがファイルに関連付けられているとは述べていません。iノードは、ファイルに関連するメタデータを含むデータ構造であるだけです。それでは、ファイルはどのようにアクセスされますか? iノードはファイルを呼び出しますか?
Iノードisファイル。iノード番号によって唯一識別されます。ファイル名は、ファイルシステム内の単なるメタデータであり、参照ファイルを参照します。 1つのファイル/ iノードは、それを参照する複数のファイル名を持つことができます。
$ touch foo
$ ln foo bar
$ ls -li foo bar
28098391 -rw-r--r-- 2 xxxxxxx xxxxx 0 Jul 6 22:15 bar
28098391 -rw-r--r-- 2 xxxxxxx xxxxx 0 Jul 6 22:15 foo
最初の列はiノード番号です。両方のファイルで同じであることに注意してください。権限の後の最初の数字はリンク数です。 foo
とbar
の両方のリンク数は2です。これは、2つの名前がそれぞれ同じファイルを参照しているためです。
$ rm foo
$ ls -li bar
28098391 -rw-r--r-- 1 xxxxxxx xxxxx 0 Jul 6 22:15 bar
rm foo
基になるファイルへの特定のリンクのみを削除します。 bar
は引き続きそれを参照します(iノード番号は変更されていませんが、リンク数は2ではなく1になっています)。また、foo
もbar
もファイルの「実際の」名前ではないことに注意してください。 foo
が最初に作成されたという事実は、それを特別なものにしませんでした。 allリンクが削除されるまで(つまり、リンク数が0に減るまで)、ファイルは実際には削除されません。それでも、ファイルは実際には削除されません。そのiノードに割り当てられたブロックは、ファイルシステムで再利用できるものとしてマークされているだけです。
これが通常のファイルの簡単な説明です...
人間はファイル名を使用してファイルを参照します。カーネルは、iノード番号と呼ばれる番号を使用してファイルを参照します。ディレクトリは、ファイル名とiノード番号の間のマッピングです。 iノードには、ファイルに関連付けられたメタデータと、ファイルの最初のデータブロックへのポインタが含まれています。最初のデータブロックには2番目のデータブロックへのポインタが含まれ、最後のデータブロックが読み取られるまで続きます。