Linuxのすべて(ディレクトリを含む)はファイルと聞きました。そのため、カタログファイルにアクセスしようとしていますが、読み取ろうとするとcat
エラーが発生しますcat: xp: Is a directory
。less
、、、more
およびを使用するとhead
同様の結果が得られ、tail
Vimnl
を使用している間に一種のナビゲーションメニューが表示されました。
だから私は自分自身を見つけることができないと思うので、答えを見つけてここに来ました。
だから...カタログファイルにはどのような情報が含まれていますか?
私は答えにそのディレクトリ内のファイルのinodeへのある種のリンクが含まれていると仮定します。しかし、これにはどのような種類の情報が含まれていますか?
ファイルにアクセスして編集する方法はありますか?
答え1
ディレクトリは通常、inode構造を持ち、他のファイルと同様にデータブロックを保持するという点でファイルです。
ディレクトリには、ファイル名と対応するinode番号を含むいくつかのデータ構造を含める必要があります。構造は、単純なリストであるか、実装の詳細である一種のツリーにすることができます。一部のファイルシステムでは、高速アクセスのために、一部のinodeデータ(たとえば、不変ファイルタイプ)もディレクトリ内にコピーされます。 (もちろん、FSがVFATの場合、ディレクトリエントリはほぼ常にinodeです。)
Linuxはディレクトリの内容を読み取ることはできませんread()
。おそらく、生データはファイルシステムによって異なるため、ユーザースペースには役に立たないので、ユーザースペースプログラムはそれを利用するためにすべてのファイルシステムの内部構造を知る必要があるからです。あるいは、カーネルは各ファイルシステムにディレクトリの互換性のあるビューを提供させる必要がありますが、これはgetdents()
/readdir()
呼び出しの目的です。
他の一部のUnixenでは、少なくとも以前のバージョンのFreeBSDなどのディレクトリコンテンツを読み取ることができます。しかし、これらについてもおそらくreaddir()
。
ほとんどのユーティリティは通常のファイルのようにディレクトリを読み取ろうとするため、エラーが発生しますが、Vimなどのスマートエディタやless
一部のスクリプトは代わりにディレクトリシステムコールを使用してテキストリストを生成します。
ext2/ext3/ext4 などの特別なツールを使用して、いくつかのディレクトリdebugfs
編集を実行できます。しかし、私の考えでは、生データのランダム編集も許可していないようです。これは、ディレクトリアクセスエラーやファイルシステムドライバの競合のレシピのように聞こえます。