File: magic.4

package info (click to toggle)
manpages-ja 0.5.0.0.20120606-1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 25,964 kB
  • sloc: perl: 161; makefile: 116
file content (236 lines) | stat: -rw-r--r-- 10,043 bytes parent folder | download | duplicates (6)
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 $