Linuxを使用してファイルのファイルタイプを判別する方法

ほとんどの人はファイルの拡張子を見て、その拡張子からファイルの種類を推測します。 たとえば、拡張子がgif、jpg、bmp、またはpngのファイルがある場合、画像ファイルが考えられます。拡張子がzipのファイルがある場合は、 zip圧縮ユーティリティを使用してファイルが圧縮されているとみなされます

実際には、ファイルは1つの拡張子を持つことができますが、全く異なるものになります。ファイルに拡張子がない場合は、どのようにファイルの種類を決定できますか?

Linuxでは、fileコマンドを使用して実際のファイルタイプを見つけることができます。

ファイルコマンドの仕組み

ドキュメントによると、fileコマンドはファイルに対して3セットのテストを実行します。

有効な応答を返す最初のテストセットは、ファイルタイプを出力します。

ファイルシステムテストは、statシステムコールからの戻りを調べます。 プログラムは、ファイルが空で、それが特別なファイルであるかどうかをチェックします。 ファイルタイプがシステムヘッダファイルにある場合、有効なファイルタイプとして返​​されます。

魔法のテストは、ファイルの内容を調べるのに役立つ、最初の数バイトのファイルの内容をチェックします。 ファイルをそのファイルタイプとマッチさせるために使用されるさまざまなファイルがあり、これらは/ etc / magic、/ usr / share / misc / magic.mgc、/ usr / share / misc / magicに格納されています。 これらのファイルは、$ HOME / .magic.mgcまたは$ HOME / .magicという名前のホームフォルダに置くことで上書きすることができます。

最後のテストは言語テストです。 ファイルがテキストファイルかどうかがチェックされます。 ファイルの最初の数バイトをテストすることにより、ファイルがASCII、UTF-8、UTF-16のいずれかであるか、またはファイルをテキストファイルとして判断する別の形式であるかを推測できます。 文字セットが推測されると、ファイルは異なる言語に対してテストされます。 例えば、ファイルacプログラムです。

いずれのテストも機能しない場合、出力は単純にデータです。

ファイルコマンドを使用する方法

fileコマンドは、次のように使用できます。

ファイルfilename

たとえば、file1というファイルがあるとします。次のコマンドを実行します。

ファイルfile1

出力は次のようになります。

file1:PNG画像データ、640 x 341,8ビット/カラーRGB、ノンインターレース

表示された出力は、file1がイメージファイルであるか、より正確にはポータブルネットワークグラフィックス(PNG)ファイルであると判断します。

ファイルの種類によって、次のように異なる結果が生成されます。

ファイルコマンドの出力をカスタマイズする

デフォルトでは、fileコマンドはファイル名とその上のすべての詳細を提供します。 ファイル名を指定せずに詳細を欲しいのであれば、以下のスイッチを使用してください:

ファイル-bファイル1

出力は次のようになります。

PNG画像データ、640×341,8ビット/カラーRGB、ノンインターレース

また、ファイル名とタイプの間の区切り文字を変更することもできます。

デフォルトでは、区切り記号はコロン(:)ですが、パイプ記号などの好きなものに変更することができます。

ファイル-F '|' ファイル1

出力は次のようになります。

file1 | PNG画像データ、640×341,8ビット/カラーRGB、ノンインターレース

複数のファイルの処理

デフォルトでは、fileコマンドを1つのファイルに対して使用します。 ただし、fileコマンドで処理されるファイルのリストを含むファイル名を指定することはできます。

たとえば、ナノエディタを使っ testfilesというファイルを開き、次の行を追加します。

ファイルを保存し、次のファイルコマンドを実行します。

ファイル-f testfiles

出力は次のようになります。

/ etc / passwd:ASCIIテキスト
/etc/pam.conf:ASCIIテキスト
/ etc / opt:ディレクトリ

圧縮ファイル

デフォルトでは、圧縮ファイルに対してfileコマンドを実行すると、次のような出力が表示されます。

file.zip:ZIPアーカイブデータ、抽出するV2.0以上

これはファイルがアーカイブファイルであることを示していますが、実際にはファイルの内容はわかりません。 圧縮ファイル内のファイルのファイルタイプを確認するには、zipファイル内を調べることができます。

次のコマンドは、ZIPファイル内のファイルに対してfileコマンドを実行します。

ファイル-z filename

出力には、アーカイブ内のファイルのファイルタイプが表示されます。

概要

一般に、ほとんどの人は単にfileコマンドを使って基本的なファイルタイプを見つけるだけですが、fileコマンドが提供するすべての可能性についてターミナルウィンドウに次のように入力してください。

マンファイル