.TH MAGIC 4 "Public Domain" .\" .\" Translated Wed Jan 12 23:14:34 JST 2000 .\" by FUJIWARA Teruyoshi .\" Updated & Modified Sun Jan 14 22:02:13 JST 2001 .\" by Yuichi SATO .\" Updated & Modified Sun May 25 17:08:32 JST 2003 .\" by Yuichi SATO .\" .\" install as magic.4 on USG, magic.5 on V7 or Berkeley systems. .SH 名前 magic \- file コマンド用のマジックナンバーファイル .SH 説明 このマニュアルページでは、 .BR file (1) コマンド (バージョン 4.12) が使用する magic ファイルの書式を説明する。 ファイルの種類を調べる方法は色々あるが、 .B file コマンドはファイルが特定の \fI「マジックナンバー (magic number)」\fR で始まるかどうかによってファイルの種類を識別する。 ファイル .I /usr/share/file/magic で指定することは、調べるべきマジックナンバー、 特定のマジックナンバーが見つかった時に表示するメッセージ、 ファイルから取り出せるその他の情報である。 .PP magic ファイルの各行では実行するテストを指定する。 テストでは、ファイル先頭から見て特定のオフセット位置にあるデータと、 1 バイトまたは 2 バイト、4 バイトの数値や文字列との比較が行われる。 テストが成功すると指定したメッセージが出力される。 行には以下の項目が含まれる: .IP offset \w'message'u+2n 調べるデータのファイル内での位置を指定するオフセット値で、単位はバイトである。 .IP type 調べるデータの型。指定できる値は以下の通りである: .RS .IP byte \w'message'u+2n 1 バイト値。 .IP short (ほとんどのシステムでは) 2 バイト値。マシンのネイティブのバイト順である。 .IP long (ほとんどのシステムでは) 4 バイト値。マシンのネイティブのバイト順である。 .IP string 文字列を表すバイト列。 string 型の指定では、オプションとして /[Bbc]* を後ろに続けることができる。 ``B'' フラグは、対象ファイル中の複数個の空白を 1 個の空白に切り詰めて扱う。 この場合、対象ファイルは少なくとも 1 個の空白を含んでいる必要がある。 magic ファイルに .I n 個の連続した空白がある場合、 対象ファイルには、これにマッチする .I n 個の連続した空白が必要となる。 ``b''フラグは、対象ファイル中の空白を 存在してもしなくてもよい空白として扱う。 さらに、``c'' フラグは、大文字・小文字を区別しないマッチを行うことを指定する: magic ファイル中の小文字は、 対象ファイル中の大文字・小文字の両方にマッチする。 しかし、magic ファイル中の大文字は、 対象ファイル中の大文字にのみマッチする。 .IP date UNIX 時刻と解釈される 4 バイト値。 .IP ldate UNIX 形式の時刻と解釈される 4 バイト値。 ただし UTC ではなくローカルタイムとして解釈される。 .IP beshort (ほとんどのシステムでは) 2 バイト値。バイト順はビッグエンディアンである。 .IP belong (ほとんどのシステムでは) 4 バイト値。バイト順はビッグエンディアンである。 .IP bedate (ほとんどのシステムでは) 4 バイト値。バイト順はビッグエンディアンである。 UNIX 時刻と解釈される。 .IP leshort (ほとんどのシステムでは) 2 バイト値。バイト順はリトルエンディアンである。 .IP lelong (ほとんどのシステムでは) 4 バイト値。バイト順はリトルエンディアンである。 .IP ledate (ほとんどのシステムでは) 4 バイト値。バイト順はリトルエンディアンである。 UNIX 時刻と解釈される。 .IP leldate (ほとんどのシステムでは) 4 バイト値。バイト順はリトルエンディアンである。 UNIX 形式の時刻と解釈される。 ただし UTC ではなくローカルタイムとして解釈される。 .RE .PP 数値型の値の後には .B & と数値を書くことができる。この場合、比較を行う前に .B & の後に置いた数値との AND 演算が行われる。型の前に .B u を置くことで、順序付きの比較を符号無しで行うことが指定できる。 .IP test ファイル内の値と比較する値。 これは C 言語の文字列として指定し、エスケープ文字も普通に使える (例: \en は改行文字)。 .IP 数値 の前には、実行する動作を指定する文字を置くことができる。 .BR = を指定した場合は、ファイル内の値は指定した値と等しくなければならない。 .BR < を指定した場合は、ファイル内の値は指定した値より小さくなければならない。 .BR > を指定した場合は、ファイル内の値は指定した値より大きくなければならない。 .BR & を指定した場合は、指定した値で立っている全てのビットがファイル内の値でも 立っていなければならない。 .BR ^ を指定した場合は、指定した値で立っているどのビットも、 ファイル内の値で立っていてはならない。 .BR x はどんな値にもマッチする。文字が省略されている場合は、 .BR = が指定されているとみなされる。 .IP 数値は C 言語の書式で指定する。例えば、 .B 13 は 10 進数、 .B 013 は 8 進数、 .B 0x13 は 16 進数である。 .IP 文字列の場合、ファイル中に含まれるバイト文字列は、指定された バイト文字列にマッチしなければならない。 演算子 .BR = , .BR < , .B > は文字列にも適用できる (ただし .B & は適用できない)。 マッチングを行う長さは、magic ファイルの文字列引数の長さである。 つまり、 .B >\e0 を指定することにより、ある行をどんな文字列にもマッチさせ、そして多分 その文字列を表示させることができるだろう。 .IP message 比較が成功したときに出力されるメッセージ。 文字列に .BR printf (3) の書式指定が含まれている場合、このメッセージを書式指定文字列として使って ファイル内の値 (指定された全てのマスク処理は実行される) が出力される。 .PP 一部のファイルフォーマットでは、ファイルの種類とともに追加情報が表示される。 文字 .B > で始まる行は、追加で行うテストと表示メッセージを示す。 1 行に含まれる .B > の数はテストのレベルを表す。 先頭に .B > がない行はレベル 0 になる。 レベル .IB n \(pl1 の各行は、magic ファイル中で自分より前にあるレベル .IB n の行のうち、最も近い位置のものの制御に従う。 レベル .I n の行のテストが成功すると、それに続く全てのレベル .IB n \(pl1 の行で指定されているテストが実行され、 そのテストが成功するとメッセージが出力される。 次に .I n があった場所でこの動作は終了する。 直前の .B > の直後の文字が .B ( ならば、括弧の後の文字列は間接オフセット値と解釈される。 つまり、括弧の後の数字はファイル内でのオフセットとして使われる。 このオフセット位置にある値が読み込まれ、 読み込まれた値がファイル中でのオフセットとして使われる。 間接オフセット値の書式は以下である: .BI (( x [.[bslBSL]][+\-][ y ]). .I x の値はファイル内でのオフセット値として使われる。 そのオフセット位置にある byte 型、short 型、long 型の値が読み込まれるが、 どの型になるかは型指定子 .B [bslBSL] によって決まる。 大文字で示される型はビッグエンディアンの値と解釈され、 小文字で示される型はリトルエンディアンの値と解釈される。 この数まで .I y の値に加えられ、その結果がファイル中のオフセット値として使われる。 何も指定されていない場合のデフォルトの型は long である。 .PP 前のフィールドの長さによってオフセット値が変わるため、 正確なオフセット値がわからない場合もある。 この場合は、直前の上位レベルの フィールドの終わりからの相対位置でオフセットを指定できる (当然ながらこの方法はサブレベルのテスト、つまり .B > で始まるテストでしか使えない)。 このような相対オフセット値は、オフセット値の前に .B & を置くことで指定する。 .SH バグ .IR long , .IR belong , .IR lelong , .IR short , .IR beshort , .IR leshort , .IR date , .IR bedate , .I ledate の書式はシステム依存である。識別させるファイルは、 この長さが違うシステムから持ってくることが多いため、 バイト列として指定すべきだろう (2B, 4B 等)。 .PP (現時点では) 間接オフセット値でエンディアンを指定して データを扱うことはできない。 .SH 関連項目 .BR file (1) \- このファイルを読むコマンド。 .\" .\" From: guy@sun.uucp (Guy Harris) .\" Newsgroups: net.bugs.usg .\" Subject: /etc/magic's format isn't well documented .\" Message-ID: <2752@sun.uucp> .\" Date: 3 Sep 85 08:19:07 GMT .\" Organization: Sun Microsystems, Inc. .\" Lines: 136 .\" .\" Here's a manual page for the format accepted by the "file" made by adding .\" the changes I posted to the S5R2 version. .\" .\" Modified for Ian Darwin's version of the file command. .\" @(#)$Id: magic.man,v 1.27 2003/09/12 19:43:30 christos Exp $