Provided by: manpages-ja_0.5.0.0.20161015+dfsg-1_all
名前
file - ファイルタイプを判定する
書式
file [ -bcikLnNprsvz ] [ -f namefile ] [ -F separator ] [ -m magicfiles ] file ... file -C [ -m magicfile ]
説明
この man ページは file コマンド version 4.12 について記述している。 file は各引き数をテストして分類する。 ファイルシステムテスト、マジックナンバーテスト、言語テストの 順序で 3 つのテストを行う。 そのうちの最初に成功したテストで、ファイルタイプを表示する。 表示されるタイプには通常以下のうち 1 つの単語が含まれる。 text (このファイルには表示可能文字といくつかの 一般的な制御文字のみが含まれ、 ASCII 端末で読んでも多分安全である)、 executable (このファイルにはプログラ ムをコンパイルした結果が含まれ、 UNIX カーネルなどにより実行可能な形式である)、 data その他のもの (data は通常「バイナリ」または表示不能なファイルである)。 ただしバイナリデータを含んでいる良く知られた形式の フォーマット (core ファイル、tar アーカイブなど) は例外である。 /usr/share/file/magic ファイルや file プ ログラム自身を変更する場合も、 これらのキーワードは変更しないこと。 人々は、ディレクトリ内の読み取り可能 なファイルに対しては、 全て ``text'' が表示されると思っている。 Berkeley がかつてやったように、 ``shell commands text'' を ``shell script'' に変更したりしてはいけない。 ファイル /usr/share/file/magic は、この プログラムのソースディストリビューションのサブディレクトリ Magdir にある数多くの小さなファイルから機械的 に作られている点に注意すること。 ファイルシステムのテストは、 stat(2) システムコールの結果の検討に基づいて行われる。 このプログラム は、ファイルが空であるかや、 特殊ファイルであるかをチェックする。 実行中のシステムに特有の既存のファイル タイプ (ソケット・シンボリックリンク・名前付きパイプ (FIFO) (ただしシステムで実装されている場合)) は、 シ ステムのヘッダファイル <sys/stat.h> に定義されていれば、すぐに分かる。 マジックナンバーテストは、 特定の決まった形式のデータを含むファイルをチェックするのに使われる。 もっとも 簡単な例は、バイナリ実行可能ファイル (コンパイルされたプログラム) a.out である。 この形式は標準インクルー ドディレクトリの a.out.h で定義されている (exec.h の場合もある)。 これらのファイルにはファイルの先頭付近 の特定位置に 「マジックナンバー」が格納されている。 これにより UNIX オペレーティングシステムは、 ファイル がバイナリ実行可能であることが分かり、 そのうちのどのファイルタイプであるかも分かる。 「マジックナン バー」の考え方は、データファイルに対する拡張にも応用されている。 ファイルの先頭から近い場所に一定の識別子 を持つファイルは、 通常はこの方法で記述できる。 これらのファイルについての情報識別子は、コンパイルされた マジックファイル /usr/share/file/magic.mgc から読み込まれる。 このコンパイルされたファイルがない場合は、 /usr/share/file/magic から読み込まれる。 更に file は $HOME/.magic.mgc または $HOME/.magic からマジック ファイルのエントリを探す。 ファイルがマジックファイルのどのエントリともマッチしなかった場合、 テキストファイルであるかを調べる。 文 字集合内の表示可能なテキストを構成する バイト列の範囲の違いを調べることにより、 ASCII, ISO-8859-x, (Macintosh や IBM PC システムで使用されている) ISO に準拠しない 8 ビット拡張 ASCII 文字集合、 UTF-8 エン コードされたユニコード、UTF-16 エンコードされたユニコード、 EBCDIC 文字集合を識別する。 ファイルがこれら のテストをパスすると、文字集合名が表示される。 ASCII, ISO-8859-x, UTF-8, 拡張 ASCII のファイルは、 これは ほぼ全ての端末で読むことができるので、 ``text'' として識別される。 UTF-16 と EBCDIC のファイルは、 たとえ テキストを含んでいたとしても読む前に変換が必要なので、 単なる ``character data'' とされる。 さらに file はテキスト型ファイルの他の特徴も決定しようとする。 ファイルの行が Unix で標準的な LF ではなく、 CR, CRLF, NEL で終了している場合は、その旨を表示する。 ファイルに組み込み (embedded) エスケープシーケンスや 重ね打 ち (overstriking) が含まれている場合も、その旨を表示する。 file はテキスト型ファイルで使われている文字集合を決定した後は、 ファイルが書かれている言語を決定しようと する。 言語テストではファイルの最初の数ブロックのどこかに現れる特定の文字列 (names.h を参照) を探す。 例 えばキーワード .br があれば、そのファイルは多くの場合 troff(1) の入力ファイルであることを示しており、 キーワード struct は C 言語プログラムであることを示している。 これらのテストは前のテストに比べると信頼性 が低いので、 最後に実行される。 言語テストのルーチンは他のファイルタイプ (例えば tar(1) アーカイブ) に関 するテストも行う。 上に挙げた文字集合のどれにも当てはまらないファイルは、 単に ``data'' と表示される。
オプション
-b, --brief 出力行の最初にファイル名を表示しない (簡易モード)。 -c, --checking-printout マジックファイルの解析形式を表示してチェックする。 通常は -m オプションと一緒に用いて、 新しいマ ジックファイルをインストールする前のデバッグに使う。 -C, --compile マジックファイルを事前に解析した内容を含む出力ファイル magic.mgc を書き出す。 -f, --files-from namefile 他の引き数リストより先に、検査するファイルの名前を namefile ファイルから読み込む (1 行に 1 つの ファイル名)。 namefile または少なくとも 1 つのファイル名引き数がなければいけない。 標準入力をテス トする場合は、ファイル名引き数として ``-'' を使うこと。 -F, --separator separator 指定した文字列をファイル名とファイルをテストした結果の区切り文字とする。 デフォルトは ``:'' であ る。 -i, --mime file コマンドの出力を人間が読みやすい昔ながらのものではなく、 mime タイプ文字列にする。 したがっ て ``ASCII text'' ではなく、 ``text/plain; charset=us-ascii'' のように出力される。 このオプション を動作させるため、 file コマンドが認識するファイルの取り扱い方法 (多くのテキストファイルタイプや ディレクトリ) を変更し、 別の ``magic'' ファイルを使うようにした。 (下記の「ファイル」のセクショ ンを参照)。 -k, --keep-going 最初にマッチしたもので停止せず、次のマッチングに進む。 -L, --dereference (システムがシンボリックリンクをサポートしている場合は) ls(1) の同じ名前のオプションと同様に、シン ボリックリンクを辿るようにさせる。 -m, --magic-file list マジックナンバーが書かれた別のファイルのリストを指定する。 1 つのファイルでも、コンマで区切られた ファイルのリストでもよい。 コンパイル済みのマジックファイルが一緒に指定された場合は、 代りにそれ を使う。 -n, --no-buffer 1 つのファイルをチェックする毎に、標準出力をフラッシュする。 これは複数のファイルをチェックすると きにのみ役立つ。 このオプションは、ファイルタイプをパイプから出力する プログラムで使われることを 意図している。 -i または --mime オプションと一緒に指定すると、 このプログラムは各ファイル名の後に ".mime" を追加する。 -N, --no-pad 出力を整列するためのファイル名への空白の追加を行わない。 -p, --preserve-date utime(2) または utimes(2) をサポートするシステムでは、 file(1) が解析したファイルを読み込まれな かったかのようにするため、 アクセス時刻を保存しようとする。 -r, --raw 印字不能文字を \ooo に変換しない。 通常、 file は印字不能文字を 8 進数表現に変換する。 -s, --special-files 通常 file は、引き数で指定されたファイルのうち stat(2) で通常のファイル (ordinary file) とされた ファイルのみを読み込んで、 タイプの決定を行う。 特殊ファイルを読み込むと異常な結果を引き起こすか も知れないため、 この動作により問題を防止している。 -s オプションを指定すると、 file は引き数で指 定されたブロックスペシャルファイルや キャラクタスペシャルファイルも読み込む。 ブロックスペシャル ファイルである raw ディスクパーティションのデータの ファイルシステムタイプを決定するのに役立つ。 このオプションを指定すると file は stat(2) が返すファイルサイズを無視する。 これは raw ディスク パーティションのサイズを 0 として返すシステムも存在するためである。 -v, --version プログラムのバージョンを表示して終了する。 -z, --uncompress 圧縮ファイルの中も検査する。 --help ヘルプメッセージを表示して終了する。
ファイル
/usr/share/file/magic.mgc デフォルトのコンパイル済みのマジックナンバーのリスト。 /usr/share/file/magic デフォルトのマジックナンバーのリスト。 /usr/share/file/magic.mime.mgc デフォルトのコンパイル済みのマジックナンバーのリスト。 -i オプションが指定された場合に、mime タイ プを出力するのに使用される。 /usr/share/file/magic.mime デフォルトのマジックナンバーのリスト。 -i オプションが指定された場合に、mime タイプを出力するのに 使用される。 /etc/magic マジックナンバーについてのローカルな追加情報。
環境変数
環境変数 MAGIC はデフォルトのマジックナンバーファイルの名前を設定する。 file はこの変数の値に ".mime" と ".mgc" を適宜追加する (どちらか一方の場合もある)。 この変数が設定されると、 file は $HOME/.magic をオープ ンしない。
関連項目
magic(4) - マジックファイルのフォーマットについての記述。 strings(1), od(1), hexdump(1) - 非テキストファイルを検査するためのツール。
標準への準拠
このプログラムは System V Interface Definition の FILE(CMD) より優れていると考えている。 ファイルに含まれ ている曖昧な言語から決定するという点では似ている。 動作は同じ名前の System V のプログラムとほぼ互換性があ る。 このバージョンはより多くのマジックナンバーを認識する。 しかし多くの場合、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 releases 3.2 以降には、 System V のものから派生した file(1) コマンドが含まれて いるが、いくつか拡張されている。 私の作ったバージョンは、Sun のものと些細な違いしかない。 Sun のバージョ ンは `&' オペレータの拡張が含まれ、 例えば以下のように使われる。 >16 long&0x7fffffff >0 not stripped
マジックディレクトリ
マジックファイルのエントリは、 いろいろな情報源、主に USENET から集められ、 多くの著者から寄贈してもらっ た。 Christos Zoulas (アドレスは以下) はマジックファイルエントリを 集めたり修正したりしてくれた。 マジッ クファイルのエントリを整理統合したものは、 定期的に配布される予定である。 マジックファイルのエントリは順番が重要である。 使用しているシステムによっては、順番の組みが不正であるかも しれない。 古い file コマンドがマジックファイルを使っている場合、 比較のために古いマジックファイルを残し ておくこと (/usr/share/file/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} /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 -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
履歴
少なくとも Research Version 4 以降の全ての UNIX に、 file コマンドは含まれている (man ページの日付は 1973 年 11 月である)。 System V バージョンでは重大な変更が行われ、 マジックナンバータイプのリストを外部に保持 するようになった。 この変更はプログラムを幾らかは遅くしたが、とても柔軟にした。 System V バージョンをベースにしたこのプログラムは、 誰のソースコードも見ずに Ian Darwin <ian@darwinsys.com> によって書かれた。 John Gilmore はコードを広範囲にわたって改訂し、 最初のバージョンより改良した。 Geoff Collyer はいくつかの 欠点を見つけ、 マジックファイルエントリを提供した。 `&' オペレータについては 1989 年に Rob McMahon, cudcv@warwick.ac.uk が貢献した。 Guy Harris, guy@netapp.com は 1993 年から現在に至るまで 多くの変更を行っている。 Christos Zoulas (christos@astron.com) は 1990 年に最初の開発を行い、 現在までメンテナンスを行っている。 2000 年の Chris Lowth, chris@lowth.com による変更: 別のマジックファイルと内部ロジックを使い、 ``-i'' で mime タイプ文字列を出力するようにした。 2000 年 7 月の Eric Fischer (enf@pobox.com) による変更: 文字コードを識別し、非 ASCII ファイルの言語を識別 するようにした。 "Magdir" ディレクトリ (/etc/magic ファイルのソース) の貢献者のリストは、 長すぎるのでここには含められな い。 貢献してくれた人は自分が貢献したことを知っているでしょう。 感謝します。
法的な注意
Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999. このソフトウェアは standard Berkeley Software Distribution copyright により 保護されている。 ソース配布にある LEGAL.NOTICE ファイルを参照すること。 ファイル tar.h と is_tar.c は John Gilmore によって書かれたもので、 彼のパブリックドメイン tar プログラム に由来する。 この 2 つのファイルには上記のライセンスが適用されない。
バグ
magdir にある全てのファイルから Magic ファイルを自動的に構築する もっと良い方法があるべきだ。 それはどん なものだろうか ? 起動を速くするためには、 マジックファイルをバイナリにコンパイルしておくべきだろう (つま り ndbm(3) や、異なる OS によるネットワーク環境で使うために固定長の ASCII 文字列にするのも良いだろう)。 これにより、System V バージョンの柔軟性を備えたまま、 同じ名前の Version 7 のプログラムより速くなるだろ う。 file には正確さよりも速度を重視したアルゴリズムが使われているため、 テキストファイルの内容を読み誤ること がある。 (主にプログラミング言語を対象とした) テキストファイルのサポートは、 単純化されていて不十分であり、更新す るには再コンパイルが必要である。 後続の行を追っていくためには、``else'' 節を付けておくべきである。 マジックファイルとキーワードで正規表現をサポートすべきである。 ASCII TAB をフィールドの区切り文字として使 用するのは、 見苦しく編集しづらいが、定着している。 例えば troff(1) コマンドに対する man ページのマクロの ように、 キーワードで大文字を許可するようにするのが望ましいだろう。 正規表現がサポートされれば、これが簡 単にできるだろう。 このプログラムは FORTRAN を判別できない。 開始行でインデントされているキーワードを見て、 FORTRAN であると 判断すべきである。 正規表現がサポートされれば、これが簡単にできるだろう。 ascmagic にあるキーワードは、多分 Magic ファイルに入れるべきだろう。 これはオフセット値に `*' のような キーワードを使うことで可能だろう。 その他の最適化としてはマジックファイルのソートがある。 これにより一度読み込んでしまえば、 最初のバイト・ 最初のワード・最初の long 型、... というように 全てのテストで突き止めていくことができる。 マジックファイ ルエントリの衝突について苦情を言ってください。 マジックファイルのエントリのソートは、 マジックファイルに おける位置ではなくファイルオフセットで行う、 というルールにするべきだろうか ? 推定した結果が「どのくらい良いか」を評価する手段を、 プログラムが提供すべきである。 最終的には (例えば ``Newsgroups:'' に対する ``Return-Path:'' のように) 他の推定結果より良くない推定結果 (例えば、ファイルの 最初の 5 文字が ``From '' など) は削除する。 しかし他の推定結果が出なければ、 最初の推定結果を使えるよう にしておくべきである。 このプログラムは、いくつかのベンダの file コマンドより遅い。 複数文字コードを新しくサポートしたこと で、いっそう遅くなってしまった。 この man ページ、特にこのセクションが長すぎる。
入手方法
オリジナルの作者の最新バージョンは、anonymous FTP で ftp.astron.com のディレクトリ /pub/file/file- X.YZ.tar.gz から入手できる。 Copyright but distributable FILE(1)