背景

背景

背景

Unixには、シンボリックリンク、デバイスファイル、procファイルなど、さまざまな種類の特殊ファイルがあります/proc/procファイルは通常のファイルにすぎず、テキストファイルでもあります。ところが残りは使い方だけを知るだけで、内部構造やどんなものがあるのか​​(深さ)はわかりません。残念ながら、ファイルにアクセスするすべての方法は、そのファイルが表すオブジェクトのみを取得します。つまり、内部表現を得る方法はありません。

質問

シンボリックリンクには、間違いなくターゲットへのパスを格納する文字列があります。しかし、文字列だけがあれば、プレーンテキストファイルとどのように区別できますか?ファイルシステムドライバが指定した特別なヘッダがあるとしたら?合意がありますか?誰もがシンボリックリンクが指すバイナリ表現が何であるかを教えてもらえますか/usr/bin/bash

デバイスファイル(ノード)の場合、バイナリ構造と表現は何ですか?動作に応じて、関連するインターフェイス番号とドライバに関する情報を含める必要があります。しかし、これはサイズが大きく異なります。誰でもこれをバイナリレベルで説明できますか?

シンボリックリンクとデバイスファイルの互換性のために(同じデバイスファイルが異なる2つの環境で動作することは不可能であることを知っていますが、想像力を発揮して実験を行うことができます)、これらのファイルのバイナリコンテンツはファイルによって大きく異なります。システムタイプとオペレーティングシステムのカーネルは何ですか?たとえば、コマンドを介さずに同じバイナリコンテンツを別のファイルシステム(ext4からxfsなど)にコピーした場合、cpファイル(symlinkまたはデバイスファイル)はまだ有効ですか? LinuxシステムからBSDシステムにコピーするのはどうですか?

それともファイルではなく、ファイルシステムヘッダーの特殊レコードですか?

ベストアンサー1

「特殊」ファイルは、「一般」ファイルのようにファイルシステムに保存される静止ファイルです。ディレクトリ、ファイル、シンボリックリンクなどは、ファイルシステムに明示的に格納されるタイプによって区別されます。バラよりUNIXの権限とファイルタイプの理解発生する可能性のあるさまざまなファイル形式に関する詳細情報。

ファイルの保存方法と保存できるファイルは、ファイルシステムによって異なります。一部のファイルシステムは、Unixスタイルのファイル形式のサブセットをサポートしています。たとえば、FATはファイルやディレクトリ(およびボリュームラベル)以外のものを保存できません。これは、「特殊」ファイルの保存はファイルシステムによって異なり、ファイルを表すビットをそのままあるファイルシステムから別のファイルシステムにコピーできないことを意味します。

シンボリックリンクは、ターゲットのテキスト表現を保存します。ほとんどの現在のUnixスタイルのファイルシステムには、シンボリックリンク(inodeにあります)に関する「コア」情報に加えて、短いターゲットのためのスペースがあります。より長いリンクにはデータブロックの割り当てが必要です。

デバイスノードには、ノードのプライマリおよびセカンダリノードと呼ばれる識別子が格納されます。これは固定ストレージ要件を持つ2つの小さな数であり、それを収容するのに十分なスペースがinodeにあります。この数はオペレーティングシステムによって異なり、その機能を維持しながらLinuxからBSDにノードをコピーすることはできません。

Ext4がこの情報を保存する方法の詳細については、以下を参照してください。カーネルExt4ドキュメントi_modeファイル形式がどのように保存されるかを具体的に見てください。

おすすめ記事