MAGIC
Section: Devices and Network Interfaces (4)
Updated: Public Domain
Index
JM Home Page
roff page
名前
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)
- このファイルを読むコマンド。
Index
- 名前
-
- 説明
-
- バグ
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 03:33:37 GMT, December 05, 2022