この記事では、主に Linux の i ノードに関する関連情報を紹介します。この記事の紹介は非常に詳細であり、必要な方は以下を参照してください。
背景
最近、Linuxコマンドを復習していて、dfに行ったところ、これまで無視していたものを発見しました。つまり、-i オプションはファイル システム パーティションの i ノード情報を一覧表示します。この i ノードとは何ですか?
inode とは何に使用されますか?
inode はファイルのメタ情報を保存するために使用される領域です。中国語訳は「インデックスノード」と呼ばれます。
i ノードに関する背景知識
まず、ファイル ストレージの内容をいくつか確認してみましょう。ファイルがハードディスクに保存されることは、ハードディスクの最小の記憶単位とも呼ばれます。セクターのサイズは 512 バイトです。
オペレーティングシステムがハードディスク上の情報を読み取るとき、一度に複数のセクターを読み取り、これらの複数のセクターはブロックとも呼ばれます。通常、ブロック サイズは 4KB、約 8 セクターのサイズです。読み取られるブロックは連続した空間であることに注意してください。
この時点で、C言語プログラムを書くときと同じように、ファイルが「ブロック」に格納されることがわかります。配列を宣言すると、配列に配置された値だけが格納されるわけではないことがわかります。また、配列の最初のアドレス、ファイルの種類、配列の長さなど、対応する配列情報も保存されます。同様に、ファイルに関連する情報と同様に、ファイルのメタ情報を保存する場所を見つける必要があります。作成、ファイルの長さなど。そして、この場所は i ノードと呼ばれます。
i ノードに保存されているコンテンツ
i ノードには、次の内容を含む保存されたファイルのメタ情報が含まれています:
ファイルのバイト数。
ファイル作成者のID。
ファイルのグループID。
ファイルの読み取りおよび書き込み権限。
ファイルの関連するタイムスタンプ。具体的なものは 3 つあります: ctime--> i ノードが最後に変更された時刻、 mtime--> ファイルの内容が最後に変更された時刻、 atime--> ファイルが最後に開かれた時刻。
リンク数
ファイルデータのブロック位置
inode番号
上記のストレージ内容を初めて見た後は、誰もが同じ疑問を持つと思います。 i ノードにはファイル関連の情報が保存されますが、なぜファイル名を保存しないのでしょうか。その理由は、ファイル名が Unix/Linux オペレーティング システムでさまざまなファイルを識別するための標準ではないためです。
オペレーティング システムは、inode 番号を通じてさまざまなファイルを識別します。
Unix/Linux システムでは、ファイル名を介してファイルを開くためにユーザー レベル名が使用されます。システム レベルでは、主に 3 つのステップを経てファイルを開きます:
ファイルに応じて対応する i ノード番号を見つけます。名前。
i ノード番号を通じて i ノード情報を取得します。
inode情報に従って、ファイルデータが保存されているブロックを見つけて、データのみを保存します。
inode の特別な機能
Unix/Linux システムでは i ノード番号とファイル名が分離されており、システム内でいくつかの特殊な現象が発生します:
i ノードの削除は削除を意味します。ファイル。一部のファイルは正しく削除されない場合があります。この場合、対応する i ノードを直接削除してファイルを削除できます。
i ノード番号を変更せずに、ファイル名のみを変更して、ファイルを移動または名前変更します。
一般的に、ファイルが開かれるとき、システムは i ノード番号を通じてファイル名を取得することはできず、ファイル名を考慮しません。
i ノード番号が存在するため、ソフトウェアを終了せずにシステムを更新できます。システムは、更新プロセス中に、現在実行中のファイルに影響を与えることなく、同じファイル名と新しい i ノードを持つファイルが存在することを介して実行中のファイルを識別します。元の古いバージョンの i ノードは、次回ソフトウェアを開いたときにリサイクルされ、ファイル名は自動的に新しい i ノード番号を指します。
i ノードのスペース占有問題
データもハードディスクに保存されるため、ハードディスクがフォーマットされると、オペレーティング システムが自動的にハードディスクのスペースを占有します。
データ領域
inodeテーブル
データ領域には主にファイルデータが格納され、inodeテーブル領域にはinode情報が格納されます。
特に、inode が占める領域のサイズは、ディスクのフォーマット時にオペレーティング システムによってすでに指定されています。この結果、データ領域のスペースは使い果たされていませんが、現時点では、inode テーブル領域がいっぱいであるため、新しいファイルをディスクに保存できません。
ディレクトリファイル
Unix/Linux では、すべてのリソースがファイルの形式で存在することがわかっています。カタログも同様です。ディレクトリを開くときは、実際にはディレクトリ ファイルを開きます。ディレクトリ ファイルの構造はリストです。
ディレクトリエントリ = インクルードファイルのファイル名 + 対応する inode 番号。
ハードリンクとソフトリンク
ハードリンクとは何か、ソフトリンクとは何かという詳細については、このブログ記事では詳しく説明しません。 i ノード。
i ノード番号の観点から見ると、Unix/Linux システムでは、複数のファイル名が同じ i ノード番号を指すことが許可されています。このとき、一方のファイル名を削除しても、もう一方のファイル名へのアクセスには影響しません。同時に、一方のファイル名でファイルを開いて変更を加えた場合、その変更は他のファイル名で共有することができます。ファイル名が開かれます。次に、これを「ハードリンク」と呼びます。 Linux では、ln コマンドを使用してハード リンクを作成できます。
上でまとめたように、inodeには「リンク数」という記憶項目があり、そのinodeのみを必要とするファイル名の総数を記録します。ハード リンクを介してファイルを指すようにファイル名が作成された場合、そのファイルに対応する i ノード データ フィールドのリンク番号は + 1 になり、その逆も同様です。この値が 0 の場合、システムはデフォルトで i ノードを指すファイル名を設定しません。このとき、inode 番号はリサイクルされ、対応するブロック領域もリサイクルされます。
対応するソフトリンクは、ファイルAとファイルBがあり、BがAのソフトリンクであるとします。この時、AとBは別ファイルなのでinode番号が違いますが! B の内容は A のパスです。B を読み取ると、システムは自動的に A にアクセスするため、どのファイルを開いてもファイル A にアクセスします。このとき、ファイルBはファイルAへの「ソフトリンク」または「シンボリックリンク」と呼ばれます。
Unix/Linux システムでは、ln -s コマンドを使用してソフト リンクを作成できます。
概要と少しの追加
上記の説明を通じて、inode が C 言語のポインター フィールドに似ていることがわかりました。ポインター フィールドはさまざまな情報を記録し、読み取りニーズに応じて正しいファイルの場所を案内します。情報。 (もちろん、まったく同じではありません。) Unix/Linux システムでディレクトリを作成すると、
以上がLinux での i ノードの使用に関するチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。