- ベストアンサー
ファイル/bin/catへのアクセス
オペレーティングシステムに関する話です。 UNIXの木構造のファイルシステムにおいて、 ファイル/bin/catのデータブロックへのアクセスはファイルシステムの内部では具体的にどの様に行われるか、分かる方教えて頂けませんか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
それじゃあ伝統的な UFS のイメージで説明します。 ファイルのモード、オーナー、サイズ、リンクカウント、各種時刻などの属性情報は i-node で管理されてます。 これは一つのファイルシステム上では一意な ID になってます。ls -i や find の -inum で指定できる番号です。 ディレクトリも一種のファイルで、/bin のディレクトリエントリに、cat の実体への i-node が格納されてます。ファイル名が格納されてるのはディレクトリエントリの方で、i-node にはファイル名は入ってません。その代りリンクカウントを +1 します。これは ln のハードリンクに相当します。ディレクトリ自身の . とその親 .. もこの機能を使ってます。パスを / からフルパスで辿るようなことも、このリンクを順にサーチすることで、最終的に目的のファイルへの i-node に辿り着きます。もちろん途中でパーミッションのチェックも行なわれます。 ちなみに rm は実際はファイルを消すのではなくて、i-node 中のリンクカウントを -1 してるだけで、このカウントがゼロになると、i-node も消されてファイルの実体もフリーされます。 一方データブロックも番号で管理されていて、i-node には複数のブロック番号を格納できます。初めのうちは直接ブロック番号を追加していきますが、ある程度からは間接参照して格納可能なサイズを伸ばすようにします。すなわち参照先のブロックに、さらにその先へのデータブロック番号が格納されるようになります。ファイルサイズが大きくなると、これが 1段、2段、3段と続きます。このブロックと i-node の関係は newfs のオプションで調整できます。 あと、これは通常ファイルの事です。デバイスファイルとかはまた別。 ファイルは穴開きもあり得る 実際はいろんな拡張がされてる。journal, logging, softupdate, mksnap, etc こんなものか。もっと詳細が知りたければ、wikipedia あたりから調べるか、書籍を漁るかしてくれ。
その他の回答 (1)
- trapezium
- ベストアンサー率62% (276/442)
/bin/cat と特定することには意味があるの? そうじゃなく単にファイルはなんでもいいから、ディレクトリエントリ見て、i-node 見て、データ本体を辿ってくというのが知りたい? 概念以上の詳細はファイルシステムによって違う、ufs, ext?, zfs, ntfs, etc
お礼
お返事ありがとうございます。 >単にファイルはなんでもいいから、ディレクトリエントリ見て、i-node 見て、データ本体を辿ってくというのが知りたい? はい、ファイルは何でもいいので、ファイルシステムの内部で具体的にどの様に行われているか知りたいです。