1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
|
.TH MAGIC 4 "Public Domain"
.\"
.\" Translated Wed Jan 12 23:14:34 JST 2000
.\" by FUJIWARA Teruyoshi <fujiwara@linux.or.jp>
.\" Updated & Modified Sun Jan 14 22:02:13 JST 2001
.\" by Yuichi SATO <sato@complex.eng.hokudai.ac.jp>
.\" Updated & Modified Sun May 25 17:08:32 JST 2003
.\" by Yuichi SATO <ysato444@yahoo.co.jp>
.\"
.\" 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 $
|