このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】Linuxのファイルの構造とiノードとの関係

Linuxのファイルの構造は、ファイル名、iノード、ファイルの実体の3要素で構成されています。

ファイル名

 ファイル名は、ファイルを識別するための名前です。Linuxではファイル名は通常、文字や数字、特定の記号から構成されます。また、ファイル名はファイルシステム内で一意である必要があります。

iノード (inode)

 iノードは、ファイルシステム内のファイルを識別し、管理するためのデータ構造です。iノードにはファイルの属性情報(ファイルの所有者、アクセス権、サイズ、作成日時、変更日時、アドレスなど)が含まれています。

 また、iノードにはファイルの実体(内容)へのアドレス(ポインタ)が格納されています。iノード番号は、ファイルシステム内で一意であり、ファイルを特定するために使用されます。

ファイルの実体

 ファイルの実体は、ファイルに格納されているデータの実際の内容です。ファイルの実体は、ファイルのメタデータに格納されているアドレス(ポインタ)を通じてアクセスされます。ファイルの実体には、テキスト、バイナリデータ、または他のファイルへのリンクが含まれる場合があります。

 これらの要素が組み合わさり、Linuxシステム内のファイルを構成しています。ファイル名がファイルの識別子としてユーザーに表示され、iノードがファイルの属性情報とリンク情報を管理し、ファイルの実体が実際のデータを保持しています。

iノードを確認するには

 Linuxにおいて、iノードを確認するにはいくつかの方法があります。一般的な方法は、以下のコマンドを使用することです。

このコマンドは、指定したファイルの iノード番号を表示します。

ls -i ファイル名

例えば、「file1.txt」というファイルの iノード番号を確認するには、次のように入力します。

ls -i file.txt

 このコマンドによって表示された出力の最初の数字が iノード番号です。これにより、ファイルの iノードを確認することができます。

 また、詳細な情報を表示するには「ls -l」コマンドを使用することもできます。これにより、ファイルのパーミッション、所有者、グループなどの属性情報に加えて、iノード番号も表示されます。

例えば、

ls -l file.txt

このコマンドによって表示された出力の最初の列には、iノード番号が表示されます。

 iノードを確認することで、ファイルがどの iノードに関連付けられているかを知ることができます。これは、ファイルの識別や管理に役立ちます。

iノードの確認

それでは、実際に操作をして、 iノードを確認していきます。

ディレクトリとファイルの階層構造を下図となるようにディレクトリとファイルを作成します。

ディレクトリの作成

まず、「dir」ディレクトリを作成します。

・「mkdir dir」コマンドを実行します。

user01@ubuntu-vm:~$ mkdir dir

ファイルの作成

「dir」ディレクトリ内に「file」という名前のテキストファイルを作成します。

・「echo "Hello World" > dir/file」コマンドを実行します。

user01@ubuntu-vm:~$ echo "Hello World" > dir/file

iノード番号の確認

ディレクトリ「dir」の iノード番号

ディレクトリ「dir」の iノード番号を確認します。

・「ls -i」コマンドを実行します。

ディレクトリ「dir」の iノード番号が「1311009」であることが分かります。

user01@ubuntu-vm:~$ ls -i
1311009 dir           1310780 デスクトップ  1310785 ミュージック
1310731 snap          1310784 ドキュメント  1310783 公開
1310781 ダウンロード  1310787 ビデオ
1310782 テンプレート  1310786 ピクチャ

・「ls -i /home/user01」

ディレクトリ「dir」のiノードのアドレス情報を確認します。

user01@ubuntu-vm:~$ ls -i /home/user01
1311009 dir           1310780 デスクトップ  1310785 ミュージック
1310731 snap          1310784 ドキュメント  1310783 公開
1310781 ダウンロード  1310787 ビデオ
1310782 テンプレート  1310786 ピクチャ

・「ls -i dir」コマンドを実行します。

 テキストファイル「file」と iノード番号「1311574」が紐づけている情報が格納されていることが分かります。

user01@ubuntu-vm:~$ ls -i dir
1311574 file

テキストファイル「file」の iノード番号

テキストファイル「file」の iノード番号を確認します。

・「ls -i dir/file」コマンドを実行します。

テキストファイル「file」の iノード番号が「1311009」であることが分かります。

user01@ubuntu-vm:~$ ls -i dir/file
1311574 dir/file

ディレクトリとファイルの関係

 Linuxでは、ディレクトリもファイルとして扱われます。つまり、ディレクトリも iノードを持ち、ファイルと同様に iノード番号によって識別されます。ディレクトリ内に格納されているファイルやサブディレクトリも、それぞれの iノード番号で管理されます。

 上で確認した内容をまとめたものが下図となります。ディレクトリ「dir」の iノード番号が1311009で、そのディレクトリ内に格納されている「file」の iノード番号が1311574です。

ディレクトリ「dir」とファイル「file」の関係を解説します。

 ディレクトリ「dir」のファイル名は「dir」です。ディレクトリ「dir」の iノード番号は1311009であり、このiノードにはディレクトリ「dir」の属性情報やアドレスが格納されています。

 ディレクトリ「dir」内に格納されている「file」の iノード番号は1311574です。この iノードにはファイル「file」の属性情報やアドレスが格納されています。

 1311009番の iノードには、ディレクトリ「dir」の属性情報やディレクトリ内のファイルやサブディレクトリのアドレスが格納されます。この iノード内のアドレスの先の実体には、ファイル名「file」と iノード番号1311574が紐づけられた情報が格納されており、これによって「file」の実体へのアクセスが可能となります。

 Linuxは、この情報を利用して、「file」の iノード番号が1311574番であることを理解し、そのiノードに格納されたアドレスを見て「file」の中身にアクセスします。

 ディレクトリ「dir」の親ディレクトリである「user01」ディレクトリには、「dir」ディレクトリの情報が登録されています。これにより、ファイルシステム内の階層構造が維持されます。

 このように、Linuxのファイルシステムではディレクトリもファイルと同様に iノードを持ち、ファイルやディレクトリの関係性が iノード番号を介して管理されます。

作成したディレクトリとファイルを削除します。

最後に、ここで作成した

・「rm -r dir」コマンドを実行して、「ls 」コマンドで削除されたかを確認します。

user01@ubuntu-vm:~$ rm -r dir
user01@ubuntu-vm:~$ ls
snap          テンプレート  ドキュメント  ピクチャ      公開
ダウンロード  デスクトップ  ビデオ        ミュージック