* nixシステムディレクトリの実際の内容

* nixシステムディレクトリの実際の内容

*nix ファイルシステムについて学んでいます。特に、私はこのチュートリアルに従いました。https://www.grymoire.com/Unix/Inodes.html一部のGoogle検索などが散在しています。 Unixディレクトリの実際の形式は、本質的に(列1)inode番号と(列2)対応するinode番号に対応するファイル/ディレクトリの名前を表す文字列で構成されるファイルですか?もしそうなら、「このディレクトリに含まれているファイル/その他のディレクトリ」と表示されるのは、実際にユーザーがこれを実行したり特定のディレクトリに移動したときにオペレーティングシステムが$ lsテーブルのエントリのリストを印刷するという事実にすぎませんか?

たとえば、これはカタログファイルの実際の形式ですか?

ここに画像の説明を入力してください。

これがCで行われた場合、ファイルには1つのint inode列と1つのchar * filename列があります。

答え1

Unixディレクトリの実際の形式は、本質的に(列1)inode番号と(列2)対応するinode番号に対応するファイル/ディレクトリの名前を表す文字列で構成されるファイルですか?

少なくとも概念的にはそうです。ただし、実際のディスク形式は異なる場合があります。

ext4 などの多くのファイルシステムは、ディレクトリをファイルとして扱い、ストレージを同じ方法で予約します。 (ext4ディレクトリのサイズを縮小できないことを除いて)ディレクトリには、変更日、権限などを保存するために独自のinodeも必要です。ただし、ディレクトリのデータ領域内の内容は異なります。 「クラシック」形式は、単に{name、inode}エントリのリストです(名前のために予約されているスペースの長さなどのいくつかのマイナーな履歴を含む)が、より高いレベルのデータ構造(ツリー)も使用します。 ext4の場合は、以下を参照してください。https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Directory_Entries

また、ファイルシステムに応じてディレクトリエントリができるまた含むタイプinodeが指しています。これは最適化に役立ちます。タイプのみが必要な場合は、stat()そのエントリに対して別々のシステムコールを作成する必要はありません。また、inode タイプは inode の存続期間中は変更されないため、変更可能な inode データがディレクトリにオフロードされる場合など、複数のディレクトリエントリを同期状態に保つ必要があるという問題はありません。

関連情報