スポンサーリンク

MAGIC

名称
解説
バグ
関連項目

名称

magic − file コマンドのマジック番号ファイル

解説

こ のマニュアルページでは file(1) コマンド バージョン "4.10" で使用され るマジックファイルのフォーマットについて説明します。 file コマンド は、 他のテストと共に、ファイルがある マジック番号で始まっているかどうかをテ ストして、ファイルのタイプを識別します。ファイル /usr/share/misc/magic で は、どのマジック番号をテストするか、あるマジック番号が見つかったとき にどのようなメッセージを出力するか、また、そのファイルから抽出するべ き 追加情報について指定しています。

こ の ファ イルの各行ではテストすべき項目について指定しています。テスト は、ファイル中のある特定のオフセットで始まるデータを 1 バイト、2 バイト もしくは 4 バイトの数値あるいは文字列と比較して行います。もしテストが成 功するとメッセージが出力されます。各行は以下のフィールドから構成され ま す。

offset

テストするファイルのデータのオフセットをバイト数で指 定する数字です。

type

テストするデータの型です。指定できる値は

byte

1 バイトの値。

short

(ほとんどのシステムにおいて) 2 バイトの値。そ のマシンの固有のバイト順で指定します。

long

(ほとんどのシステムにおいて) 4 バイトの値。そ のマシンの固有のバイト順で指定します。

string

バイトの文字列。文字列タイプの指定には、後ろ に /[Bbc]* を付けることが可能です。 ‘‘B’’ フラグは、 ターゲットの空白を圧縮します。圧縮対象には、少なくと もひとつの空白文字が含まれることが必要です。マジック に n 個の連続する空白がある場合、マッチする た め に は、 ターゲットには少なくとも n 個の連続する空白があ ることが必要です。 ‘‘b’’ フラグは、すべての空白を 省 略 可能な空白として扱います。最後に ‘‘c’’ フラグは、 大文字小文字を区別しないマッチングを指定します。すな わち、マジック中の小文字は、ターゲット中の小文字と大 文字の両方にマッチします。一方、マジック中の大 文 字 は、ターゲット中の大文字にのみマッチします。

date

UNIX 日時として解釈される 4 バイトの値。

ldate

UNIX 日時として解釈される 4 バイトの値。ただ し UTC ではなくローカル日時として解釈されます。

beshort

(ほとんどのシステムにおいて) 2 バイトの値。 ビッグエンディアンのバイト順です。

belong

(ほとんどのシステムにおいて) 4 バイトの値。 ビッグエンディアンのバイト順です。

bedate

Unix 日時として解釈される (ほとんどのシス テ ムにおいて) 4 バイトの値。ビッグエンディアンのバイト 順です。

leshort

(ほとんどのシステムにおいて) 2 バイトの値。 リトルエンディアンのバイト順です。

lelong

(ほとんどのシステムにおいて) 4 バイトの値。 リトルエンディアンのバイト順です。

ledate

UNIX 日時として解釈される (ほとんどのシス テ ムにおいて) 4 バイトの値。リトルエンディアンのバイト 順です。

leldate

UNIX 日時として解釈される (ほとんどのシステ ムにおいて) 4 バイトの値。リトルエンディアンのバイト 順です。ただし UTC ではなくローカル日時として解釈 さ れます。

数字の型にはオプションとして & と数値を続けることができ、これにより比較 を行う前に AND をとる数値を指定します。型の前に u を付加すると比較は 符 号なしで行われます。

test

ファイル中の値と比較される値。型が数字の場合、この値は C 言語の形式で指定されます。これが文字列の場合、通常のエスケー プ 記法 (たとえば改行では\n) が可能な C 言語文字列として指定されま す。

数値の前には実行される操作を示す文字を付加することができます。そ の文字にはファイルの値が指定された値と等価であることを指定する = 、ファイルの値が指定された値より小さいことを指定する < 、ファ イ ル の値が指定された値より大きいことを指定する > 、指定された値の 中でセットされているすべてのビットがファイルでの値ですべてセット さ れていることを指定する & 、指定された値の中でセットされている どれかのビットがファイルでの値でオフであることを指定する ^ 、 何 ら かの値がマッチすることを指定する x があります。これらの文字が ない場合は = が指定されているものとみなされます。

数値は C 言語の形式で指定されます。例えば 13 は 10 進数、 013 は 8 進数、 0x13 は 16 進数となります。

文字列値については、ファイル中のバイト文字列は指定されたバイト文 字列にマッチしなければなりません。オペレータ =<> ( & を 除く) が文字列に適用できます。マッチングに使用される長さはマジッ クファイルでの文字列の引数の長さとなります。これは >\0 とする こ とにより、その行はどの文字列にもマッチすることが可能であり、おそ らくその文字列が出力されることを意味します (すべての文字列はヌル 文字列より長いため)。

message

比 較 が 成 立 し た と き に出力されるメッセージです。文字列に printf(3) 指定形式が含まれている場合は、ファイルから得た値 ( 指 定 されたマスクを適用したもの) が、そのメッセージをフォーマット 文字列として用いて出力されます。

いくつかのファイルフォーマットは、ファイルタイプと共に出力される追加 情 報を含んでいます。文字 > で始まる行は追加テストと出力されるメッセージを 指定します。その行での > の数はテストのレベルを指定します。行頭に > が な い行はレベル 0 とみなされます。レベル n+1 の各行はマジックファイル中 でその行より前にあるもっとも近いレベル n の行の制御下にあります。レベル n での行のテストが成功した場合、それに続く行で指定されたすべてのレベル n+1 のテストが実施され、それらのテストが成功するとメッセージが出力さ れ ま す。次のレベル n の行でこれが終了します。最後の > に続く最初の文字が ( であれば、その括弧の後の文字列は間接オフセットとして解釈されます。 こ れ は括弧の後の数字がそのファイル中のオフセットとして使用されることを意 味します。そのオフセットでの値が読み込まれ、再度ファイルのオフセット と し て使用されます。間接オフセットは ((x[.[bslBSL]][+−][y]) の形式をとり ます。値 x はファイル中でのオフセットとして使 わ れ ま す。 型 指 定 子 [bslBSL] によりそれぞれバイト、short もしくは long として読み込まれま す。大文字の型は、値をビッグエンディアンとして解釈し、小文字の型は、 値 をリトルエンディアンとして解釈します。その数字に値 y が加算され、その結 果はファイルの中でのオフセットとして使用されます。型指定子がない場合 は long がデフォルトの型となります。

オ フセットは、その前にあるフィールドの長さに依存するため、正確な値が分 からない場合があります。そのような場合は最後の上位レベルのフィールド の 最 後からの相対的なオフセットを指定することができます (もちろんこれは下 位レベルのテスト、すなわち > で始まるテストでのみ可能です)。この場合 の 相 対 オフセットは & をオフセットのプレフィックスとして使用して指定しま す。

バグ

フォーマット long, belong, lelong, short, beshort, leshort, date, bedate, ledate はシステムに依存します。テストされるファイルは通常それら の長さが不変であるシステムのものであり、これらはおそらくバイト数 (2B と か 4B とか) として指定すべきでょう。

間 接 オ フセットで使用されるエンディアンを指定したデータは (現在は) サ ポートされていません。

関連項目

file(1) − このファイルを読み込むコマンド

スポンサーリンク