私はいくつかのソース(例:これ)、次の内容:
- inode はファイルに関する情報を格納するデータ構造です。
- inode番号はinodeを指します。
- iノード番号と対応するiノードのマッピング情報を保持する別のiノードテーブルがあります。
- ファイルが作成されると、ファイルに inode 番号とファイル名が割り当てられます。
- 名前を使用してファイルにアクセスすると、内部的に名前が最初に対応するアノード番号にマップされ、ドンインデックスノード訪問しました。
私が理解していない最も重要なのは最後の行です。 inodeはinodeにアクセスしますが、inodeはファイルとは独立したエンティティです。そして与えられた説明は、inodeが何らかの方法でファイルに関連付けられているとは言わず、inodeがファイルに関連付けられたメタデータを含むデータ構造であることを意味します。それでは、ファイルにどのようにアクセスしますか? inodeはファイルを呼び出していますか?
答え1
インデックスノードはい認識されたファイルホロインデックスノード番号で。ファイル名はファイルシステムのメタデータにすぎません。おすすめファイルとして。単一ファイル/inodeは、それを参照する複数のファイル名を持つことができます。
$ 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
最初の列は inode 番号です。両方のファイルは同じです。権限の後の最初の数字はリンクの数です。どちらの名前も同じファイルを参照するため、どちらもリンクfoo
数は2です。bar
$ rm foo
$ ls -li bar
28098391 -rw-r--r-- 1 xxxxxxx xxxxx 0 Jul 6 22:15 bar
rm foo
基本ファイルへの特定のリンクのみが削除されます。bar
それでも参照されています(inode番号は変更されていませんが、リンクの数は2ではなく1です)。また、これはファイルの「実際の」名前ではなく、ファイルの「実際の」名前でもfoo
なく、bar
最初に作成されたという事実がファイルをfoo
特別にするものではありません。ファイルは実際に削除されるまで削除されません。みんなリンクが削除されます(つまり、リンク数がゼロになるまで)。それでもファイルは実際には削除されません。その inode に割り当てられたブロックは、ファイルシステムの再利用が可能とマークされます。
答え2
以下は、一般ファイルの簡単な説明です。
人間はファイルを参照するためにファイル名を使用します。カーネルは inode 番号と呼ばれる数字を使ってファイルを参照します。ディレクトリはファイル名と inode 番号のマッピングです。 inodeには、ファイルに関連付けられたメタデータとファイルの最初のデータブロックへのポインタが含まれています。第1のデータブロックは第2のデータブロックへのポインタを含み、最後のデータブロックを読み出すまで続く。