aboutsummaryrefslogtreecommitdiff
path: root/ja/man/man1/file.1
blob: 05eec2f140c40946b09bafe61467c14b5e16de32 (plain) (blame)
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
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
.\" %Id: file.1,v 1.12 1998/03/23 07:43:13 charnier Exp %
.Dd July 30, 1997
.Dt FILE 1 "Copyright but distributable"
.Os
.Sh 名称
.Nm file
.Nd ファイルの種類を判定する
.Sh 書式
.Nm file
.Op Fl vczL
.Op Fl f Ar namefile
.Op Fl m Ar magicfiles
.Ar
.Sh 解説
このマニュアルは
.Nm
コマンドのバージョン 3.22 について記載しています。
.Nm
は、namefile で指定されたファイルの種類を判定するプログラムです。判定の
ために、ファイルシステムテスト、マジックナンバテスト、言語テストの
3 つのテストをこの順に実行し、
.Em 最初に
判定できた結果からファイルの種類を表示します。
.Pp
ファイルの種類として表示されるのは、
.Em text
(
.Tn ASCII
キャラクタだけのファイルで、
.Tn ASCII
端末に表示した場合、
問題が起こらないもの)、
.Em executable
(
.Ux
カーネル等に理解可能な形にコンパイルされたプログラムを
含むファイル)、その他のものを意味する
.Em data
(data は、通常 `バイナリ' か表示不能なもの) のうちの 1 つです。
例外は、内部フォーマットがよく知られた、
バイナリデータを含むファイル (コアファイルや tar アーカイブ) です。
ファイル
.Pa /usr/share/misc/magic
やプログラムそのものを変更するときは、
.Em "これらのキーワードを残して下さい"
。
.Pp
ディレクトリ内のすべての可読なファイルは、
単語 ``text'' を表示することが期待されています。
Berkeley で行われたように、``shell commands text'' を
``shell script'' と変更するようなことはしないで下さい。
.Pp
ファイルシステムテストは、
.Xr stat 2
システムコールからの戻り値を調べることに基づいています。
このプログラムは、ファイルが空であるかどうか、ある種の
特殊ファイルであるかどうかを調べます。
使っているシステムに合った既知のファイルの種類
(システムに実装されたソケット、シンボリックリンク、
名前付きパイプ (FIFO)) は、システムヘッダファイル
.Pa sys/stat.h
で定義されていれば表示されます。
.Pp
マジックナンバテストは、ファイルが固定フォーマットのデータであるか
どうかをチェックするために使われます。
よい例が、実行可能なバイナリ実行形式 (コンパイルされたプログラム)
.Pa a.out
ファイルです。このフォーマットは標準インクルードディレクトリ内の
.Pa a.out.h
や場合により
.Pa exec.h
で定義されています。
実行ファイルは、
ファイルの先頭近くの特定の場所に、`マジックナンバ' を持ちます。
これは
.Ux
オペレーティングシステムに対し、
ファイルがバイナリ実行形式であり、
どのタイプの実行可能ファイルであるかを知らせます。
`マジックナンバ' の概念は拡張され、データファイルにも適用されています。
ファイルの先頭に近い固定位置に固定識別子があるファイルは、
このように記述できます。
これらのファイルの情報は、マジックファイル
.Pa /usr/share/misc/magic
から読み込まれます。
.Pp
もしファイルが
.Tn ASCII 
ファイルのようであるなら、
.Nm
は、その言語を推定しようとします。
言語テストは、ファイルの始めの数ブロックに
特定の文字列 (
.Pa Inames.h
を参照)
があるかどうかを探します。たとえばキーワード
.Em .br
があればそれはおそらく
.Xr troff 1
の入力ファイルであり、
.Em struct
というキーワードは、C 言語のプログラムであることを示しています。
こうした推定方法は、前述の 2 つのテストより信頼性が低いため、
最後に行われます。言語テストルーチンは (
.Xr tar 1
アーカイブのような) その他のファイルもチェックし、未知のファイルを
`ascii text' とすべきか、 `data' とすべきかを決定します。
.Sh オプション
.Bl -tag -width indent
.It Fl v
プログラムのバージョンを表示して、終了します。
.It Fl m Ar list
マジックナンバを含む別のファイルの
.Ar list
を指定します。
これは、1 つのファイルか、コロン (:) で分けられたファイルのリストです。
.It Fl z
compress で圧縮されたファイルの中身を見ようとします。
.It Fl c
マジックファイルを解析した形式を、調査できるように表示します。
通常、
新しいマジックナンバファイルを使う前にデバッグするために、
.Fl m
オプションとともに用います。
.It Fl f Ar namefile
引数の前に
.Ar name_file
から調べるべきファイル名を (1 行に 1 つ) 読み込みます。
.Ar name_file
もしくは引数の filename は少なくとも 1 つは指定しなければなりません。
標準入力のファイルの種類を判定させる場合は、
ファイル名として、``-'' を指定します。
.It Fl L
オプションは(システムがシンボリックリンクを提供していれば)、
.Xr ls 1
コマンドの
.Fl L
オプションと同様にシンボリックリンクをたどって実際のファイルの中
身の種類を判定します。
.El
.Sh 関連ファイル
.Bl -tag -width /usr/share/misc/magic -compact
.It Pa /usr/share/misc/magic
デフォルトのマジックナンバのリスト
(以前のバージョンの
.Bx Free では
.Pa /etc/magic
でした)
.El
.Sh 環境変数
環境変数
.Em MAGIC
は、デフォルトのマジックナンバファイルを指定するために
使うことができます。
.Sh 関連項目
.Xr od 1 ,
.Xr strings 1 ,
.Xr magic 5
.Sh 標準適合性
このプログラムは、その中に含まれる曖昧な言語をできるだけ特定できる
ようになっており、
System V の FILE(CMD) で定義されるインタフェースを越えているはずです。
同名の System V のプログラムと、ほとんど動作は同じです。
しかし、このバージョンはより多くのマジックを知っているので、多くの場合に
異なった (より正確な) 出力を出します。
.Pp
このバージョンと System V のものとの大きな違いは、
このバージョンは全ての空白を区切り文字として扱うため
パターン内の空白はエスケープしなければならないということです。
たとえば、
.br
>10     string  language impress\       (imPRESS data)
.br
とマジックファイルに書かれていた場合は、次のように
変更せねばなりません。
.br
>10     string  language\e impress      (imPRESS data)
.br
またこのバージョンでは、バックスラッシュを含んでいる
パターンもエスケープしなくてはいけません。たとえば、
.br
0	string		\ebegindata	Andrew Toolkit document
.br
とマジックファイルに書かれていた場合は、次のように
変更せねばなりません。
.br
0	string		\e\ebegindata	Andrew Toolkit document
.br
.Pp
Sun Microsystems の SunOS リリース 3.2 もしくはそれ以降には、
System V 由来の
.Xr file 1
コマンドが含まれていますが、拡張がなされています。
このバージョンは SUN のものとは、細かい点でしか異なりません。
このバージョンには `&' 演算子の拡張が含まれています。
使い方は、次のようなものです。
.br
>16	long&0x7fffffff	>0		not stripped
.Sh マジックディレクトリ
マジックファイルのエントリは様々なソース (主に USENET)
から集められたり、様々な作者から提供されました。
.An Chirstos Zoulas
(下記のアドレス) が、
マジックファイルエントリをさらに集めたり訂正するでしょう。
統合したマジックファイルエントリは、定期的に配布されるでしょう。
.Pp
マジックファイルにおけるエントリの順序は
重要です。
使っているシステムによって、エントリの順序が正しくなくなることが
あります。
もし、あなたの古い
.Nm
コマンドがマジックファイルを使っているのなら、
比較のため古いマジックファイルを保存して下さい
(たとえば、
.Pa /usr/share/misc/magic.orig
という名前に変更します) 。
.Sh 歴史
.Nm
コマンドは、少なくとも Research Version 6
(マニュアルページの日付は、1975 年 1 月)
からはどの
.Ux
にもありました。
System V バージョンはある重要な変更、
すなわち外部マジックナンバリストを導入しました。
これによってプログラムのスピードはわずかに低下しましたが、
更にまた柔軟になりました。
.Pp
このプログラムは、System V バージョンを基づいており、
.An Ian Darwin
によって、他の誰かのソースコードを見ることなく
書かれました。
.Pp
.An John Gilmore 
はコードを拡張し、最初の版よりも
よいものにしました。
.An Geoff Collyer
は 不適当なところが数箇所あるのを
発見し、いくつかマジックファイルエントリを
提供しました。
プログラムは、ずっと発展し続けています。
.SH 作者
.An Ian F. Darwin Aq ian@sq.com ,
UUCP アドレス {utzoo | ihnp4}!darwin!ian,
住所 P.O. Box 603, Station F, Toronto, Ontario, CANADA M4Y 2L8.
により書かれました。
.Pp
.An Rob McMahon Aq cudcv@warwick.ac.uk
が 1989 年に、`&' 演算子を単純な
`x&y != 0' から `x&y op z' に拡張するため変更しました。
.Pp
.An Guy Harris Aq guy@auspex.com
が 1993 年に、
.Bl -item -offset indent
.It
``旧型'' の `&' 演算子を元のように戻しました。理由は、
.Bl -enum -offset indent
.It
Rob McMahon の変更によりこれまでの使用法ができなくなった。
.It
このバージョンの
.Nm
がサポートする SunOS の ``新型'' の `&' 演算子で、`x&y op z' も扱える。
.It
Rob の変更はドキュメントに書かれていなかった。
.El
.It
他段階の `>' 追加。
.It
``beshort'', ``leshort'' などのキーワードの追加。
.Nm
が動いているプロセスのバイトオーダではなく、
ファイル特有のバイトオーダで数字を見るようにするキーワードです。
.El
.Pp
.An Ian Darwin
や
.An Christos Zoulas Aq christos@deshaw.com
を含む
多くの作者による 1990-1992 年の変更。
.Sh 法律上の注意
Copyright (c) Ian F. Darwin, Toronto, Canada,
1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993.
.Pp
This software is not subject to and may not be made subject to any
license of the American Telephone and Telegraph Company, Sun
Microsystems Inc., Digital Equipment Inc., Lotus Development Inc., the
Regents of the University of California, The X Consortium or MIT, or
The Free Software Foundation.
.Pp
This software is not subject to any export provision of the United States
Department of Commerce, and may be exported to any country or planet.
.Pp
Permission is granted to anyone to use this software for any purpose on
any computer system, and to alter it and redistribute it freely, subject
to the following restrictions:
.Pp
.Bl -enum -offset indent
.It
The author is not responsible for the consequences of use of this
software, no matter how awful, even if they arise from flaws in it;
.It
The origin of this software must not be misrepresented, either by
explicit claim or by omission.  Since few users ever read sources,
credits must appear in the documentation;
.It
Altered versions must be plainly marked as such, and must not be
misrepresented as being the original software.  Since few users
ever read sources, credits must appear in the documentation;
.It
This notice may not be removed or altered.
.El
.Pp
A few support files (
.Fn getopt ,
.Fn strtok )
distributed with this package
are in the public domain; they are so marked.
.Pp
The files
.Pa tar.h
and
.Pa is_tar.c
were written by
.An John Gilmore
from his public-domain
.Nm tar
program, and are not covered by the above restrictions.
.Sh バグ
マジックディレクトリから
マジックファイルを自動的に作成するよりよい方法があるはずです。
それは何なのでしょうか。より起動を速くするため
マジックファイルをバイナリにコンパイルするとよいでしょう。
(たとえば
.Xr ndbm 3
あるいは、異機種ネットワーク環境では固定長の
.Tn ASCII
文字)。
そうすれば、同名の バージョン 7 のプログラムと同じぐらいの速さで
System V バージョンの柔軟性を持ったプログラムとなるでしょう。
.Pp
.Nm
には、正確さよりも 速度を重視したアルゴリズムが
いくつかあるので
.Tn ASCII
ファイルの内容については
間違うことがあります。
.Pp
.Tn ASCII
ファイルのサポート ( 元々はプログラミング言語のため ) は
単純で、不十分であり、更新には再コンパイルが必要です。
.Pp
複数の行に渡るものをサポートするため
``else'' 項があるべきです。
.Pp
マジックファイルと キーワードの正規表現を
サポートするべきです。
.Tn ASCII TAB
をフィールドの識別子にすることは醜く、
ファイルの編集を難しくしていますが、残されています。
.Pp
キーワードに大文字を許すことが勧められます。たとえば、
.Xr troff 1
コマンドと man page マクロの区別です。
正規表現のサポートで、このことは簡単になるでしょう。
.Pp
\s-2FORTRAN\s0 に対してプログラムが働きません。
行の先頭にインデントされているキーワードを見ることにより
\s-2FORTRAN\s0 だと判別すべきです。
正規表現のサポートによりこれは簡単になるでしょう。
.Pp
.Em ascmagic
に入っている
キーワードのリストは、おそらくマジックファイルに
入れるべきものです。
これはオフセットの値として `*' のようなキーワードを
使うことで可能でしょう。
.Pp
最初の文字、最初の語、最初の long などに関する
テストを 最初に読み込んだときに全て行うことができるよう
マジックファイルを並べ直す最適化法はないだろうか。
マジックファイルの矛盾について述べるようにならないか。
エントリーの順序を
マジックファイル上の位置ではなく、
ファイルオフセット順にすることはできないだろうか。
.Pp
プログラムは、推定が「どれぐらいよい」のかを知る方法を
提供すべきです。ファイルの最初の 5 文字が ``From ''
であるときに推測をしても、 ``Newsgroups:'' や "Return-Path:"
といった文字による推測ほどよくはないので、推測結果を
捨てることになります。しかし、もしそういった文字が
現れなければ最初の推定を使わなければなりません。
.Pp
このプログラムは、いくつかの商用の
.Nm
コマンドより遅いです。
.Pp
このマニュアルページ、特にこの節が長過ぎます。
.Sh 入手性
オリジナル作者の最新のバージョンを anonymous FTP で、
.Em ftp.deshaw.com
の
.Pa /pub/file/file-X.YY.tar.gz
から手に入れることができます。