FILE(1) | FreeBSD General Commands Manual | FILE(1) |
名称
file — ファイルタイプを判定する書式
file | [ -bchiklLNnprsvz0][ --apple][ --mime-encoding][ --mime-type][ -e testname][ -F separator][ -f namefile][ -m magicfiles] file ... |
file | -C [ -m magicfiles] |
file | [ --help] |
解説
このマニュアルページは、 file コマンドのバージョン "5.11"を文書化しています。file は、各引数を分類する試みにおいて各引数をテストします。次の順序で実行される 3 つのテストがあります: ファイルシステムテスト、マジックテスト、言語テストです。成功した 最初の テストによって、ファイルタイプが、印刷されます。
通常、印刷されるタイプは、 text (ファイルは、印刷文字といくつかの共通の制御文字だけを含んでいて、 ASCII 端末で読み込むためにたぶん安全です) executable (ファイルは、いくつかの UNIX カーネルまたはその他で理解できる形式でプログラムをコンパイルした結果を含んでいます) または、他の何かを意味する data (データは、通常“バイナリ”または印刷不可能です) という単語の 1 つを含みます。例外は、バイナリデータを含むことが知られている、よく知られたファイル形式 (コアファイル、tar アーカイブ) です。マジックファイルまたはプログラム自体を変更するとき、 これらのキーワードを保存する ことを確認してください。ユーザは、ディレクトリのすべての読み込み可能なファイルが、印刷された単語“text”があることを知っていることを当てにします。 Berkeley で行われたように“shell commands text”を“shell script”と変更しないでください。
ファイルシステムのテストは、 stat(2) システムコールからの返り値を調べることに基づいています。プログラムは、ファイルが空であるかどうか、または、ある種の特殊ファイルであるかどうか確認します。実行しているシステムに適切な既知のファイルのタイプ (それらを実装するシステムの、ソケット、シンボリックリンク、または名前付きパイプ (FIFO)) は、それらがシステムヘッダファイル < sys/stat.h> で定義されるなら、直感で理解できます。
マジックのテストは、特に固定の形式であるファイルをチェックするために使用されます。この規範的な例は、形式が、標準のインクルードディレクトリの < elf.h>, < a.out.h> あるいは < exec.h> で定義されている、バイナリの実行可能 (コンパイルされたプログラム) a.out ファイルです。これらのファイルには、ファイルがバイナリの実行形式で、それについていくつかのタイプのどれであるかと UNIX オペレーティングシステムに伝える、ファイルの始まりの近くの特定の場所に格納されている、“マジック”があります。“マジック番号”の概念は、データファイルへの拡張によって適用されています。通常、ファイルの小さな固定のオフセットのある不変の識別子があるファイルは、このような方法で説明することができます。これらのファイルを識別する情報は、コンパイルされたマジックファイル /usr/share/misc/magic.mgc または、コンパイルされたファイルが存在しないなら、ディレクトリ /usr/share/misc/magic のファイルから読み込まれます。さらに、 $HOME/.magic.mgc または $HOME/.magic が存在しているなら、システムのマジックファイルに優先して使用されます。
ファイルがマジックファイルのエントリのいずれにもマッチしないなら、テキストファイルのように思えるかどうか確かめるために検査されます。各文字集合で印字可能なテキストを構成する、異なったバイトの範囲とシーケンスによって、 ASCII, ISO-8859-x, (Macintosh と IBM PC システムで使用されるような) 非 ISO 8-bit 拡張 ASCII 文字集合、UTF-8 でエンコードされた Unicode, UTF-16 でエンコードされた Unicode, EBCDIC 文字集合を、識別することができます。ファイルがこれらのテストのいずれかをパスするなら、その文字集合を報告します。 ASCII, ISO-8859-x, UTF-8, 拡張された ASCII ファイルは、ほとんど、どの端末でもたいてい読み込み可能であるので、“text”として識別されます。 UTF-16 と EBCDIC は、それらが、テキストを含んでいますが、それを読み込む前に、変換を必要とするテキストであるので、“character data”のみです。さらに、 file は、テキストタイプのファイルの他の特性を決定することを試みます。ファイルの行が、Unix 標準の LF でなく、CR、CRLF、または NEL で終了するなら、これは、報告されます。また、埋め込まれたエスケープシーケンスまたは重ね打ちを含むファイルも識別されます。
いったん、 file は、テキストタイプのファイルで使用される文字集合を決定すると、ファイルがどのような言語で書かれているかを決定することを試みます。言語のテストは、ファイルの最初の数ブロックで、どこでも現れることができる特定の文字列 ( < names.h> を参照) を探します。例えば、キーワード .br は、ちょうどキーワード struct が C プログラムを示すように、ファイルがたぶん troff(1) の入力ファイルであることを示します。これらのテストは、前の 2 つのグループほど信頼できないので、最後に実行されます。また、言語テストルーチンは、 ( tar(1) アーカイブのような) 何らかの寄せ集めでないかどうかテストされます。
上記にリストされた文字集合のどれかで書かれているように識別できないファイルは、単に“data”と言われいます。
オプション
- -b, - -brief
- 出力行の前にファイル名を付けません (簡潔モード)。
- -C, - -compile
- マジックファイルまたはディレクトリの前もって解析されたバージョンを含む magic.mgc 出力ファイルに書き込みます。
- -c, - -checking-printout
- マジックファイルの解析された形式のチェックをプリントアウトします。通常、これは、インストールする前に、新しいマジックファイルをデバッグするために -m フラグとともに使用されます。
- -e, - -exclude testname
-
ファイルのタイプを決定するために行われるテストのリストから
testname で指定されたテストを排除します。有効なテスト名は、次の通りです:
- apptype
- (EMX でのみ) EMX アプリケーションタイプ。
- ascii
- テキストファイルの各種のタイプ (このテストは、‘encoding’オプションの設定のにかかわらず、テキストのエンコーディングを推測しようします)。
- encoding
- ソフトマジックテストのための異なったテキストエンコーディング。
- tokens
- 後方互換性のために無視されます。
- cdf
- 複合文書ファイル (Compound Document Files) の詳細を印刷します。
- compress
- 圧縮されたファイルをチェックして、内容を調べます。
- elf
- ELF ファイルの詳細を印刷します。
- soft
- マジックファイルを調べます。
- tar
- tar ファイルを調べます。
- -F, - -separator separator
- ファイル名と返されたファイルの結果の間の分離記号として指定された文字列を使用します。デフォルトは、‘:’です。
- -f, - -files-from namefile
- 引数リストの前に、(1 行に 1 つの) namefile から調べられるファイルの名前を読み込みます。 namefile または、少なくとも 1 つのファイル名の引数のどれかは、存在していなければなりません。標準入力をテストするためには、ファイル名の引数として‘-’を使用します。 namefile は、アンラップ (unwrap) され、このオプションに遭遇し、それ以上のオプションの処理が終る前に、囲まれたファイル名が処理されることに注意してください。これによって、同じ file の起動で、異なるコマンド行の引数があるファイルの複数のリストを処理することを可能にします。したがって、デリミタを設定したいなら、次のように、ファイルのリストを指定する前に、それを行う必要があります: “ -f namefile -F @”の代わりに“ -F @ -f namefile。”
- -h, - -no-dereference
- (シンボリックリンクをサポートするシステムで) オプションによって、シンボリックリンクをたどりません。環境変数 POSIXLY_CORRECT が定義されないなら、これは、デフォルトです。
- -i, - -mime
- file コマンドは、伝統的な人間に読み込み可能ななものよりむしろ、 mime タイプ文字列を出力します。したがって、“ASCII text”よりむしろ‘text/plain; charset=us-ascii’とします。
- - -mime-type, - -mime-encoding
- 指定された要素だけを印刷するのを除いた同様の -i。 -i と同様ですが、指定された (複数の) 要素だけを印刷します。
- -k, - -keep-going
- 最初の一致でも停止せずに、処理を継続します。その後の一致には、先頭に追加された文字列‘\012-’があります。 (改行が必要なら、 -r オプションを参照してください。)
- -l, - -list
- 各マジックパターンの強さに関する情報を印刷します。
- -L, - -dereference
- (シンボリックリンクをサポートするシステムで) オプションによって、 ls(1) の link-named オプションのように、シンボリックリンクをたどります。これは、環境変数 POSIXLY_CORRECT が定義されているなら、デフォルトです。
- -l
- マッチングのために使用される順序でソートされたパターンのリストを表示します。
- -m, - -magic-file magicfiles
- マジックを含むファイルとディレクトリの代替のリストを指定します。これは、単一の項目、またはコロン (:) で区切られたリストを指定できます。コンパイルされたマジックファイルが、ファイルまたはディレクトリと一緒に見つけられるなら、それが、代わりに使用されます。
- -N, - -no-pad
- 出力が整列するようにファイル名をパディングしません。
- -n, - -no-buffer
- 各ファイルをチェックした後に、stdout を強制的にフラッシュします。ファイルのリストをチェックする場合にだけ、これは、役に立ちます。パイプからファイルタイプの出力を必要とするプログラムによって使用されることを目的としています。
- -p, - -preserve-date
- utime(3) または utimes(2) をサポートするシステムで、 file が、それらを決して読み込まなかったふりをするために、分析されたファイルのアクセス時刻を保存しようと試みます。
- -r, - -raw
- 印刷できない文字を\ooo に変換しません。通常、 file は、印刷できない文字をそれらの 8 進数表現へに変換します。
- -s, - -special-files
- 通常、 file は、 stat(2) が報告する引数ファイルのタイプが通常のファイルだけを読み込んで判断することを試みます。特殊ファイルの読み込みには、特別の結果があるので、これは、問題を回避します。また、 -s オプションを指定することによって、 file は、ブロックまたはキャラクタ特殊ファイルである引数ファイルを読み込みます。これは、ブロック特殊ファイルである、raw (生の) ディスクパーティションのデータのファイルシステムタイプを判断するために役に立ちます。また、いくつかのシステムで、raw (生の) ディスクパーティションに対して 0 のサイズを報告するので、このオプションによって、 file は、 stat(2) によって報告されたファイルサイズを無視します。
- -v, - -version
- プログラムのバージョンを印刷 (表示) して、終了します。
- -z, - -uncompress
- 圧縮されたファイルの内容を見る調べることを試みます。
- -0, - -print0
- ファイル名の終わりの後ろに、ヌル文字‘\0’を出力します。 cut(1) の出力に良いです。これは、いまでも印刷されるセパレータ (分離記号) に影響しません。
- --help
- ヘルプメッセージを印刷 (表示) して、終了します。
関連ファイル
- /usr/share/misc/magic.mgc
- デフォルトのコンパイルされたマジックのリスト。
- /usr/share/misc/magic
- デフォルトのマジックファイルを含むディレクトリ。
環境変数
デフォルトのマジックのファイル名を設定するのに、環境変数 MAGIC を使用することができます。その変数が設定されているなら、 file は、 $HOME/.magic をオープンすることを試みません。 file は、“ .mgc”を適切にこの変数の値に追加します。しかしながら、 file は、考慮される file.mime のための順序が存在しなければなりません。 (シンボリックリンクをサポートしているシステムでは)、環境変数 POSIXLY_CORRECT は、 file がシンボリックリンクをたどるかどうかの試みを制御します。設定されているなら、 file は、シンボリックリンクをたどり、そうでなければ、だどりません。また、これは、 -L と -h オプションによっても制御されます。標準適合性
このプログラムは、FILE(CMD) の System V Interface Definition に含まれたあいまいな言語から決定できる限りでは、その仕様を超えていると信じられます。その振る舞いは、同じ名前の System V プログラムとほとんど互換性があります。しかしながら、このバージョンは、より多くのマジックを知っているので、多くの場合、異なった (より正確ですが) 出力を作り出します。このバージョンと System V との間の 1 つの著しい違いは、このバージョンが、デリミタとして任意の空白類を扱うので、パターン文字列中の空白を、エスケープしなければならないことです。例えば、既存のマジックファイルの
>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 コマンドを含んでいますが、いくつかの拡張があります。このバージョンは、細かな点のみ Sun のものと異なっています。それは、例えば、次のように使用される、‘&’演算子の拡張を含んでいます。
>16 long&0x7fffffff >0 not stripped
マジックディレクトリ
マジックファイルのエントリは、主に USENET のような、様々なソースから集められて、様々な作者によって寄稿されました。 Christos 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} /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 /dev/hda: application/x-not-regular-file /dev/wd0a: application/x-not-regular-file
歴史
少なくとも Research Version 4 以降のすべての UNIX (1973 年 11 月の日付のマニュアルページ) には、 file コマンドがあります。 System V バージョンは、次の 1 つの重要な大きな変更を導入しました: マジックのタイプの外部のリストです。これによって、プログラムがわずかに遅くなりましたが、はるかにフレキシブル (柔軟性があるよう) になりました。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>によって、次の変更がおこなわれました: mime タイプ文字列を出力して、代替のマジックファイルと内部の論理を使用するために、 -i オプションを取り扱います。
文字コードを識別し、非 ASCII ファイルの言語を識別しようと試みるように、 2000 年 7 月に、Eric Fischer <enf@pobox.com>によって変更されました。
2007 年から 2011 年に、 MIME サポートを改良し、MIME と非 MIME マジックをマージし、マジックのファイルと同様にディレクトリをサポートし、多くのバグフィックスを適用して、構築システムを改良し、文書を改良し、純粋な Python で Python 構築を書き換えるために、 Reuben Thomas <rrt@sc3d.org>によって変更されました。
‘magic’ディレクトリ (マジックファイル) への寄稿者のリストは、ここに含めるには長過ぎます。誰もがあなたのことを知っています。感謝しています。多くの貢献者は、ソースファイルにリストされています。
法律上の注意
Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999. Covered by the standard Berkeley Software Distribution copyright; see the file COPYING in the source distribution.ファイル tar.h と is_tar.c は、John Gilmore のパブリックドメイン tar(1) プログラムから彼によって書かれました、上記のライセンスの適用を受けません。
戻り値
file は、成功すれば 0 を返し、エラーであれば、0 以外を返します。バグ
http://bugs.gw.com/ のバグトラッカか、または<file@mx.gw.com>のメーリングリストにバグを報告してパッチを送ってください。TODO (しなければならないこと)
MIME と APPLE のフラグのためにテストが、あらゆる所で必要がなき、実際の出力が、1 つの場所でのみ行うことができるように出力を修正します。これは、設計を必要とします。提案: リストに可能な出力をプッシュし、次に、終わりで最後にプッシュした (ほとんどの specific、1 つの望み) 値をピックし、リストが空であるなら、デフォルトを使用します。これは、評価を遅くするべきではありません。すべてのマジックのバグをすつぶし続ける。よいソースについては、Debian BTS を参照。
例えば、%s パターンのような、それらを印刷することができるように、任意に長い文字列を格納する。 Debian バグ #271672 を修正。初心者のより複雑な store/load コードを要求するでしょう。
現在のレベル (Debian バグ #466037) の後に相対的なオフセットのための構文を追加する。
ファイル -ki が動作するようにする、すなわち、複数の MIME タイプを与えます。
それらは何かを解読するために Office2007 文書の内部を見ることができるように、 zip ライブラリを追加する。
ファイル記述のソースのための URL を印刷するオプションを追加する。
入手性
利用者は、 ftp.astron.com のディレクトリ /pub/file/file-X.YZ.tar.gz で、 anonymous FTP によって、原作者の最新版を取得することができます。October 17, 2011 | FreeBSD |