スポンサーリンク

FILE(1) FreeBSD 一般コマンドマニュアル FILE(1)

名称

file − ファイルの種類を判定する

書式

file [−bciknNsvzL] [−f namefile] [−F separator] [−m magicfiles] file ...

file −C [−m magicfile]

解説

このマニュアルは、引数で指定されたファイルの種類を判定する、 file ユー ティリティのバージョン 3.41 について記載しています。判定のために、ファイ ルシステムテスト、マジックナンバテスト、言語テストの 3 つのテストをこの順 に実行し、 最初に判定できた結果からファイルの種類を表示します。

ファイルの種類として表示されるのは、 ‘‘text’’ (印字可能文字と少数の制御文 字だけのファイルで、 ASCII 端末に表示した場合、問題が起こらないもの)、 ‘‘executable’’ ( UNIX カーネル等に理解可能な形にコンパイルされたプログラ ムを含むファイル)、その他のものを意味する ‘‘data’’ (data は、通常 ‘バイナ リ’ か表示不能なもの) のうちの 1 つです。例外は、内部フォーマットがよく知 られた、バイナリデータを含むファイル (コアファイルや tar アーカイブ) で す。ファイル /usr/share/misc/magic やプログラムそのものを変更するときは、 これらのキーワードを残して下さい。ディレクトリ内のすべての可読なファイル は、単語 ‘‘text’’ を表示することが期待されています。 Berkeley で行われた ように、 ‘‘shell commands text’’ を ‘‘shell script’’ と変更するようなこと はしないで下さい。ファイル /usr/share/misc/magic は、 file のソース配布中 の Magdir サブディレクトリ中の大量の小さなファイルから機械的に構築される ことに注意してください。

ファイルシステムテストは、 stat(2) システムコールからの戻り値を調べること に基づいています。このプログラムは、ファイルが空であるかどうか、ある種の 特殊ファイルであるかどうかを調べます。使っているシステムに合った既知の ファイルの種類 (システムに実装されたソケット、シンボリックリンク、名前付 きパイプ (FIFO)) は、システムヘッダファイル <sys/stat.h> で定義されていれ ば表示されます。

マジックナンバテストは、ファイルが固定フォーマットのデータであるかどうか をチェックするために使われます。よい例が、実行可能なバイナリ実行形式 (コ ンパイルされたプログラム) a.out ファイルです。このフォーマットは標準イン クルードディレクトリ内の <a.out.h> や場合により <exec.h> で定義されていま す。実行ファイルは、ファイルの先頭近くの特定の場所に、 ‘マジックナンバ’ を持ちます。これは UNIX オペレーティングシステムに対し、ファイルがバイナ リ実行形式であり、どのタイプの実行可能ファイルであるかを知らせます。 ‘マ ジックナンバ’ の概念は拡張され、データファイルにも適用されています。ファ イルの先頭に近い固定位置に固定識別子があるファイルは、このように記述でき ます。これらのファイル識別情報は、組み込みのマジックファイル /usr/share/misc/magic.mgc または組み込みファイルが存在しない場合は /usr/share/misc/magic から読み込まれます。

ファイルがマジックファイルのどのエントリにもマッチしない場合、 text ファ イルに見えるかどうか検査されます。 ASCII, ISO-8859-x, 非 ISO 8-bit 拡張 ASCII 文字集合 (Macintosh および IBM PC システムで使用), UTF-8-encoded Unicode, UTF-16-encoded Unicode, EBCDIC の文字集合が区別可能であり、これ には各文字集合における印字可能 text を構成するバイトの範囲およびシーケン スを使用します。ファイルがこれらのテストのいずれかを通過した場合、文字集 合が報告されます。 ASCII, ISO-8859-x, UTF-8, extended-ASCII ファイルは ‘‘text’’ として識別されます。なぜなら、ほとんどどのような端末においても読 めるからです。 UTF-16 および EBCDIC は ‘‘character data’’ でしかありませ ん。これらは text を含みますが、読む前に変換が必要だからです。さらに、 file は text タイプファイルの他の特性も判定しようとします。ファイルの行の 終端が、 UNIX 標準の LF ではなく、 CR, CRLF, NEL のいずれかである場合、そ のことが報告されます。組み込みのエスケープシーケンスや重ね打ちを含むファ イルについても、識別されます。

text タイプファイルで使用されている文字集合を判定した後、その言語を推定し ようとします。言語テストは、ファイルの始めの数ブロックに特定の文字列 ( Inames.h を参照) があるかどうかを探します。たとえばキーワード .br があれ ばそれはおそらく troff(1) の入力ファイルであり、 struct というキーワード は、C 言語のプログラムであることを示しています。こうした推定方法は、前述 の 2 つのテストより信頼性が低いため、最後に行われます。言語テストルーチン は ( tar(1) アーカイブのような) その他のファイルもチェックします。

上記の文字集合のいずれで記述されているとも識別できなかったファイルは、単 に ‘‘data’’ と呼ばれます。

オプション

       −b

出力行の前にファイル名を付けません (短縮モード)。

−c
マジックファイルを解析した形式を、調査できるように表示します。通 常、新しいマジックナンバファイルを使う前にデバッグするために、 −m オプションとともに用います。

−C
magic.mgc
出力ファイルを書きます。これには構文解析される前のバー ジョンのファイルが含まれます。

−f namefile
引数の前に namefile から調べるべきファイル名を (1 行に 1 つ) 読み 込みます。 namefile もしくは引数の filename は少なくとも 1 つは指 定しなければなりません。標準入力のファイルの種類を判定させる場合 は、ファイル名として、 ‘‘’’ を指定します。

−F separator
‘:’ の代りに、指定したセパレータ文字を使用します。

−i
file
に、伝統的な人間が読める形式の代りに、 mime タイプ文字列を出 力させます。よって、 ‘‘ASCII text’’ の代りに ‘‘text/plain; charset=us-ascii’’ となります。本オプションが動作するようにするた めに、 file はファイル認識方法 (例えば、多くの text ファイルタイ プやディレクトリ等) を変え、別の magic ファイルを使用します (後述 の 関連ファイル節を参照してください)。

−k
最初にマッチしても停止せずに、処理を継続します。

−m list
マジックナンバを含む別のファイルの list を指定します。これは、1 つのファイルか、コロン (:) で分けられたファイルのリストです。

−n
各ファイルのチェック後に、標準出力をフラッシュします。ファイルの 一覧をチェックしているときのみ、有用です。ファイルタイプをパイプ から出力するプログラムにおいて使用することを意図します。

−N
ファイル名が格好良く揃うようにはパッドしません。

−v
プログラムのバージョンを表示して、終了します。

−z
compress で圧縮されたファイルの中身を見ようとします。

−L
オプションは(システムがシンボリックリンクを提供していれば)、 ls(1) コマンドの −L オプションと同様にシンボリックリンクをたどっ て実際のファイルの中身の種類を判定します。

−s
通常、 file が引数のファイルの読み込みとタイプの判定を行うのは、 stat(2) が通常ファイルであると報告した場合のみです。これにより問 題を回避しています。なぜなら、特殊ファイルの読み込みは、特定の結 果を発生させる場合があるからです。 −s オプションを指定すると、 file は、ブロックおよびキャラクタの特殊ファイルも読み込みます。こ れは、raw ディスクパーティション中のデータに存在するファイルシス テムタイプの判定に有用です。なぜなら、raw ディスクパーティション はブロック型特殊ファイルであるからです。本オプションはまた、 filestat(2) が報告するファイルの大きさを無視するようにさせます。な ぜなら、システムによっては、 raw ディスクパーティションの大きさは 0 であると報告するものがあるからです。

関連ファイル

       /usr/share/misc/magic.mgc

デフォルトの組み込まれたマジックナンバのリス ト
/usr/share/misc/magic
デフォルトのマジックナンバのリスト
/usr/share/misc/magic.mime
−i
が指定されて mime タイプを出力する場合に使 用する、デフォルトのマジックナンバのリスト

環境変数

環境変数 MAGIC は、デフォルトのマジックナンバファイルを指定するために使う ことができます。

関連項目

hexdump(1), od(1), strings(1), magic(5)

標準適合性

FILE(CMD) の System V Interface Definition, Fourth Edition (‘‘SVID4’’) の 曖昧な記述から判断する限りにおいては、このプログラムはこの仕様を越えてい ると思われます。同名の System V のプログラムと、ほとんど動作は同じです。 しかし、このバージョンはより多くのマジックを知っているので、多くの場合に 異なった (より正確な) 出力を出します。

このバージョンと System V のものとの大きな違いは、このバージョンは全ての 空白を区切り文字として扱うためパターン内の空白はエスケープしなければなら ないということです。たとえば、

>10 string language impress (imPRESS data)

とマジックファイルに書かれていた場合は、次のように変更せねばなりません。

>10 string language\ impress (imPRESS data)

またこのバージョンでは、バックスラッシュを含んでいるパターンもエスケープ しなくてはいけません。たとえば、

0 string \begindata Andrew Toolkit document

とマジックファイルに書かれていた場合は、次のように変更せねばなりません。

0 string \\begindata Andrew Toolkit document

Sun Microsystems の SunOS リリース 3.2 もしくはそれ以降には、 System V 由 来の file(1) コマンドが含まれていますが、拡張がなされています。このバー ジョンは SUN のものとは、細かい点でしか異なりません。このバージョンには ‘&’ 演算子の拡張が含まれています。使い方は、次のようなものです。

>16 long&0x7fffffff >0 not stripped

マジックディレクトリ

マジックファイルのエントリは様々なソース (主に USENET) から集められたり、 様々な作者から提供されました。 Chirstos Zoulas (下記のアドレス) が、マ ジックファイルエントリをさらに集めたり訂正するでしょう。統合したマジック ファイルエントリは、定期的に配布されるでしょう。

マジックファイルにおけるエントリの順序は重要です。使っているシステムに よって、エントリの順序が正しくなくなることがあります。もし、あなたの古い file コマンドがマジックファイルを使っているのなら、比較のため古いマジック ファイルを保存して下さい (たとえば、 /usr/share/misc/magic.orig という名 前に変更します)。

使用例

$ file file.c file /dev/{wd0a,hda}
file.c:    C program text
file:      ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
           dynamically linked (uses shared libs), stripped
/dev/wd0a: block special (0/0)
/dev/hda:  block special (3/0)
$ file -s /dev/wd0{b,d}
/dev/wd0b: data
/dev/wd0d: x86 boot sector

$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}

# Linux

/dev/hda: x86 boot sector
/dev/hda1: Linux/i386 ext2 filesystem
/dev/hda2: x86 boot sector
/dev/hda3: x86 boot sector, extended partition table
/dev/hda4: Linux/i386 ext2 filesystem
/dev/hda5: Linux/i386 swap file
/dev/hda6: Linux/i386 swap file
/dev/hda7: Linux/i386 swap file
/dev/hda8: Linux/i386 swap file
/dev/hda9: empty
/dev/hda10: empty

$ file -s /dev/rwd0e

# BSD

/dev/rwd0e:
Unix Fast File system (little-endian),
last mounted on /usr,
last written at Mon Feb 10 13:22:40 2003,
clean flag 2,
number of blocks 28754208,
number of data blocks 27812712,
number of cylinder groups 3566,
block size 8192,
fragment size 1024,
minimum percentage of free blocks 5,
rotational delay 0ms,
disk rotational speed 60rps,
TIME optimization

$ file -i file.c file /dev/{wd0a,hda}
file.c: text/x-c
file: application/x-executable, dynamically linked (uses shared libs),
not stripped
/dev/hda: application/x-not-regular-file
/dev/wd0a: application/x-not-regular-file

歴史

file コマンドは、少なくとも Research Version 4 (マニュアルページの日付 は、1973 年 11 月) からはどの UNIX にもありました。 System V バージョンは ある重要な変更、すなわち外部マジックナンバリストを導入しました。これに よってプログラムのスピードはわずかに低下しましたが、更にまた柔軟になりま した。

このプログラムは、System V バージョンを基づいており、 Ian Darwin ⟨ian@darwinsys.com⟩ によって、他の誰かのソースコードを見ることなく書かれ ました。

John Gilmore は、コードを拡張し、最初の版よりもよいものにしました。 Geoff Collyer は、不適当なところが数箇所あるのを発見し、いくつかマジックファイ ルエントリを提供しました。 Rob McMahon ⟨cudcv@warwick.ac.uk⟩ は、1989 年 に、 ‘&’ 演算子を寄贈しました。

Guy Harris ⟨guy@netapp.com⟩ は、1993 年から現在に至り、多くの変更を行って います。

基本開発と 1990 年から現在に至るメンテナンスを、 Christos Zoulas ⟨christos@astron.com⟩ が行っています。

2000 年に Chris Lowth ⟨chris@lowth.com⟩ が修正を行い、 −i オプションが mime タイプ文字列を出力し、別のマジックファイルと内部ロジックを使用するよ うになりました。

2000 年 7 月に Eric Fischer ⟨enf@pobox.com⟩ が修正を行い、文字コードを識 別し、非 ASCII ファイルの言語を識別しようとするようになりました。

Magdir ディレクトリ ( /usr/share/misc/magic ファイルのソース) に対する寄 贈者は、ここに含めるには長過ぎます。ご了承ください。

法律上の注意

Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999. Covered by the standard Berkeley Software Distribution copyright; see the file LEGAL.NOTICE in the source distribution.

The files tar.h and is_tar.c were written by John Gilmore from his public-domain tar program, and are not covered by the above license.

バグ

Magdir から Magic ファイルを自動的に作成するよりよい方法があるはずです。 それは何なのでしょうか。より起動を速くするためマジックファイルをバイナリ にコンパイルするとよいでしょう。 (たとえば ndbm(3) あるいは、異機種ネット ワーク環境では固定長の ASCII 文字)。そうすれば、同名の バージョン 7 のプ ログラムと同じぐらいの速さで System V バージョンの柔軟性を持ったプログラ ムとなるでしょう。

file ユーティリティには、正確さよりも 速度を重視したアルゴリズムがいくつ かあるので text ファイルの内容については間違うことがあります。

text ファイルのサポート (元々はプログラミング言語のため) は単純で、不十分 であり、更新には再コンパイルが必要です。

複数の行に渡るものをサポートするため else 項があるべきです。

マジックファイルと キーワードの正規表現をサポートするべきです。 ASCII TAB をフィールドの識別子にすることは醜く、ファイルの編集を難しくしています が、残されています。

キーワードに大文字を許すことが勧められます。たとえば、 troff(1) コマンド と man page マクロの区別です。正規表現のサポートで、このことは簡単になる でしょう。

FORTRAN に対してプログラムが働きません。行の先頭にインデントされている キーワードを見ることにより FORTRAN だと判別すべきです。正規表現のサポート によりこれは簡単になるでしょう。

ascmagic に入っているキーワードのリストは、おそらく Magic ファイルに入れ るべきものです。これはオフセットの値として ‘*’ のようなキーワードを使うこ とで可能でしょう。

最初の文字、最初の語、最初の long などに関するテストを 最初に読み込んだと きに全て行うことができるようマジックファイルを並べ直す最適化法はないだろ うか。マジックファイルの矛盾について述べるようにならないか。エントリの順 序をマジックファイル上の位置ではなく、ファイルオフセット順にすることはで きないだろうか。

プログラムは、推定が ‘‘どれぐらいよい’’ のかを知る方法を提供すべきです。 ファイルの最初の 5 文字が ‘‘From ’’ であるときに推測をしても、 ‘‘Newsgroups:’’ や ‘‘Return-Path:’’ といった文字による推測ほどよくはない ので、推測結果を捨てることになります。しかし、もしそういった文字が現れな ければ最初の推定を使わなければなりません。

このプログラムは、いくつかの商用の file コマンドより遅いです。複数の文字 コードのサポートにより、より遅くなっています。

このマニュアルページ、特にこの節が長過ぎます。

入手性

オリジナル作者の最新のバージョンを anonymous FTP で、 ftp.astron.com/pub/file/file-X.YZ.tar.gz から手に入れることができます。

FreeBSD 10.0 February 27, 2003 FreeBSD 10.0

スポンサーリンク