Provided by: manpages-ja_0.5.0.0.20180315+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)