Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all bug

名前

       magic - file コマンド用のマジックナンバーファイル

説明

       このマニュアルページでは、  file(1) コマンド (バージョン 4.12) が使用する magic ファイルの
       書式を説明する。 ファイルの種類を調べる方法は色々あるが、 file  コマンドはファイルが特定の
       「マジックナンバー   (magic  number)」  で始まるかどうかによってファイルの種類を識別する。
       ファイル /usr/share/file/magic で指定することは、調べるべきマジックナンバー、 特定のマジッ
       クナンバーが見つかった時に表示するメッセージ、 ファイルから取り出せるその他の情報である。

       magic  ファイルの各行では実行するテストを指定する。 テストでは、ファイル先頭から見て特定の
       オフセット位置にあるデータと、 1 バイトまたは 2 バイト、4 バイトの数値や文字列との比較が行
       われる。 テストが成功すると指定したメッセージが出力される。 行には以下の項目が含まれる:

       offset   調べるデータのファイル内での位置を指定するオフセット値で、単位はバイトである。

       type     調べるデータの型。指定できる値は以下の通りである:

                byte     1 バイト値。

                short    (ほとんどのシステムでは)   2  バイト値。マシンのネイティブのバイト順であ
                         る。

                long     (ほとんどのシステムでは)  4   バイト値。マシンのネイティブのバイト順であ
                         る。

                string   文字列を表すバイト列。  string 型の指定では、オプションとして /[Bbc]* を
                         後ろに続けることができる。 ``B''  フラグは、対象ファイル中の複数個の空白
                         を  1 個の空白に切り詰めて扱う。 この場合、対象ファイルは少なくとも 1 個
                         の空白を含んでいる必要がある。 magic ファイルに n 個の連続した空白がある
                         場合、  対象ファイルには、これにマッチする  n 個の連続した空白が必要とな
                         る。 ``b''フラグは、対象ファイル中の空白を  存在してもしなくてもよい空白
                         として扱う。  さらに、``c'' フラグは、大文字・小文字を区別しないマッチを
                         行うことを指定する:  magic  ファイル中の小文字は、  対象ファイル中の大文
                         字・小文字の両方にマッチする。 しかし、magic ファイル中の大文字は、 対象
                         ファイル中の大文字にのみマッチする。

                date     UNIX 時刻と解釈される 4 バイト値。

                ldate    UNIX 形式の時刻と解釈される 4 バイト値。 ただし UTC ではなくローカルタイ
                         ムとして解釈される。

                beshort  (ほとんどのシステムでは)   2  バイト値。バイト順はビッグエンディアンであ
                         る。

                belong   (ほとんどのシステムでは)  4   バイト値。バイト順はビッグエンディアンであ
                         る。

                bedate   (ほとんどのシステムでは)   4  バイト値。バイト順はビッグエンディアンであ
                         る。 UNIX 時刻と解釈される。

                leshort  (ほとんどのシステムでは)  2   バイト値。バイト順はリトルエンディアンであ
                         る。

                lelong   (ほとんどのシステムでは)   4  バイト値。バイト順はリトルエンディアンであ
                         る。

                ledate   (ほとんどのシステムでは)  4   バイト値。バイト順はリトルエンディアンであ
                         る。 UNIX 時刻と解釈される。

                leldate  (ほとんどのシステムでは)   4  バイト値。バイト順はリトルエンディアンであ
                         る。 UNIX 形式の時刻と解釈される。 ただし UTC ではなくローカルタイムとし
                         て解釈される。

       数値型の値の後には & と数値を書くことができる。この場合、比較を行う前に & の後に置いた数値
       との AND 演算が行われる。型の前に u を置くことで、順序付きの比較を符号無しで行うことが指定
       できる。

       test   ファイル内の値と比較する値。  これは C 言語の文字列として指定し、エスケープ文字も普
              通に使える (例: \n は改行文字)。

              数値  の前には、実行する動作を指定する文字を置くことができる。   =   を指定した場合
              は、ファイル内の値は指定した値と等しくなければならない。 < を指定した場合は、ファイ
              ル内の値は指定した値より小さくなければならない。 > を指定した場合は、ファイル内の値
              は指定した値より大きくなければならない。 & を指定した場合は、指定した値で立っている
              全てのビットがファイル内の値でも 立っていなければならない。 ^  を指定した場合は、指
              定した値で立っているどのビットも、  ファイル内の値で立っていてはならない。 x はどん
              な値にもマッチする。文字が省略されている場合は、 = が指定されているとみなされる。

              数値は C 言語の書式で指定する。例えば、 13 は 10 進数、 013 は 8 進数、 0x13 は  16
              進数である。

              文字列の場合、ファイル中に含まれるバイト文字列は、指定された バイト文字列にマッチし
              なければならない。 演算子 =, <, >  は文字列にも適用できる  (ただし  &  は適用できな
              い)。 マッチングを行う長さは、magic ファイルの文字列引数の長さである。 つまり、 >\0
              を指定することにより、ある行をどんな文字列にもマッチさせ、そして多分 その文字列を表
              示させることができるだろう。

       message
              比較が成功したときに出力されるメッセージ。  文字列に printf(3) の書式指定が含まれて
              いる場合、このメッセージを書式指定文字列として使って ファイル内の値 (指定された全て
              のマスク処理は実行される) が出力される。

       一部のファイルフォーマットでは、ファイルの種類とともに追加情報が表示される。 文字 > で始ま
       る行は、追加で行うテストと表示メッセージを示す。 1 行に含まれる > の数はテストのレベルを表
       す。  先頭に > がない行はレベル 0 になる。 レベル n+1 の各行は、magic ファイル中で自分より
       前にあるレベル n の行のうち、最も近い位置のものの制御に従う。 レベル n  の行のテストが成功
       すると、それに続く全てのレベル n+1 の行で指定されているテストが実行され、 そのテストが成功
       するとメッセージが出力される。 次に n があった場所でこの動作は終了する。 直前の > の直後の
       文字が ( ならば、括弧の後の文字列は間接オフセット値と解釈される。 つまり、括弧の後の数字は
       ファイル内でのオフセットとして使われる。 このオフセット位置にある値が読み込まれ、 読み込ま
       れた値がファイル中でのオフセットとして使われる。       間接オフセット値の書式は以下である:
       ((x[.[bslBSL]][+-][y]).  x の値はファイル内でのオフセット値として使われる。 そのオフセット
       位置にある   byte  型、short  型、long  型の値が読み込まれるが、  どの型になるかは型指定子
       [bslBSL] によって決まる。 大文字で示される型はビッグエンディアンの値と解釈され、  小文字で
       示される型はリトルエンディアンの値と解釈される。  この数まで  y の値に加えられ、その結果が
       ファイル中のオフセット値として使われる。  何も指定されていない場合のデフォルトの型は  long
       である。

       前のフィールドの長さによってオフセット値が変わるため、  正確なオフセット値がわからない場合
       もある。 この場合は、直前の上位レベルの フィールドの終わりからの相対位置でオフセットを指定
       できる  (当然ながらこの方法はサブレベルのテスト、つまり  > で始まるテストでしか使えない)。
       このような相対オフセット値は、オフセット値の前に & を置くことで指定する。

バグ

       long, belong, lelong, short, beshort, leshort, date, bedate, ledate の書式はシステム依存で
       ある。識別させるファイルは、 この長さが違うシステムから持ってくることが多いため、 バイト列
       として指定すべきだろう (2B, 4B 等)。

       (現時点では) 間接オフセット値でエンディアンを指定して データを扱うことはできない。

関連項目

       file(1) - このファイルを読むコマンド。

                                          Public Domain                                  MAGIC(4)