Linux環境で作業をしていると、ファイルの拡張子だけではその中身がわからないケースによく遭遇します。たとえば、拡張子が .txt
でも実際はバイナリファイルだったり、.log
と思っていたファイルが実は圧縮ファイルだったということもあります。
そんな時に役立つのが、Linuxの「file」コマンドです。このコマンドはファイルの拡張子に依存せず、中身を解析してその正体を教えてくれる便利なツールです。この記事では、fileコマンドの基本的な使い方から、実際の使用例、オプションの解説、活用場面までを詳しく紹介します。Linuxを使いこなすうえで必須とも言えるこのコマンドの実力をぜひ知ってください。
fileコマンドとは?
fileコマンドは、指定したファイルの「中身」を調べて、その種類を判定するコマンドです。判定結果としては「ASCIIテキストファイル」「JPEG画像データ」「gzip圧縮データ」など、具体的な形式が返ってきます。
他のコマンドやGUIツールと違い、fileは拡張子に頼らずファイルのヘッダ情報などから中身を判断するため、信頼性が高いという特徴があります。多くのLinuxディストリビューションで標準搭載されており、コマンドライン操作の基本ツールのひとつとして活用されています。
基本的な使い方
fileコマンドの最もシンプルな使い方は以下の通りです。
file ファイル名
たとえば、example.txt
というファイルがあるとして、それが本当にテキストファイルなのかを確認するには次のように入力します。
file example.txt
実行結果の一例:
example.txt: ASCII text
このように、fileコマンドはファイルの中身を判定して、その情報を返してくれます。
複数ファイルをまとめて調べる
fileコマンドは複数のファイルにも対応しています。ワイルドカード(*
)を使って一括判定することも可能です。
file *.log
あるいはディレクトリ内のすべてのファイルを対象とするなら以下のようにもできます。
file *
このようにして、大量のファイルがどのような種類なのかを効率的に確認できます。
オプションの活用
fileコマンドにはいくつか便利なオプションがあります。代表的なものをいくつか紹介します。
-iオプション(MIMEタイプを表示)
通常のfileコマンドは「ASCII text」や「JPEG image data」などと表示しますが、-i
オプションを使うとMIMEタイプを返します。
file -i example.jpg
実行結果:
example.jpg: image/jpeg; charset=binary
この形式はWebアプリやAPI開発などで、MIMEタイプ指定が必要な場合に非常に役立ちます。
-bオプション(ファイル名を表示しない)
通常は結果にファイル名が表示されますが、-b
(brief)を付けると、ファイル名を省略して種類のみ表示します。
file -b example.txt
出力例:
ASCII text
スクリプト内でファイル種別だけを取り出したいときに便利です。
fileコマンドの実例集
ここではいくつかの具体的なファイルとfileコマンドの出力例を紹介します。
圧縮ファイルの場合
file archive.zip
結果:
archive.zip: Zip archive data, at least v2.0 to extract
画像ファイルの場合
file picture.png
結果:
picture.png: PNG image data, 800 x 600, 8-bit/color RGB
実行ファイル(バイナリ)の場合
file myapp
結果:
myapp: ELF 64-bit LSB executable, x86-64, version 1 (SYSV)
fileコマンドは、実行形式のバイナリやスクリプト、あるいはライブラリファイルの情報も詳細に教えてくれるので、システム管理者にとっても非常に有用です。
スクリプトとの連携例
fileコマンドはシェルスクリプトと組み合わせて使うことで、より高度な自動化処理が可能になります。たとえば、特定の拡張子が .txt
でもバイナリファイルであるものを検出して除外するスクリプトは以下のようになります。
for f in *.txt; do
if ! file "$f" | grep -q "text"; then
echo "$f はテキストファイルではありません"
fi
done
このように使えば、拡張子に頼らずファイルの内容をベースに処理を分岐できます。
判定ロジックの仕組み:マジックナンバーとは?
fileコマンドがなぜファイルの種類を見分けられるのかというと、「マジックナンバー」と呼ばれるファイル先頭の特定のバイト列を参照しているからです。
たとえば、PNGファイルは常に先頭に 89 50 4E 47
(=.PNG
)というバイト列が含まれており、fileコマンドはこれをもとにPNGであると判断します。
fileコマンドはこの「マジックファイル」と呼ばれる定義ファイル(通常 /usr/share/misc/magic
)を参照しながら判定を行っています。この仕組みを知ると、fileコマンドの判定結果に対する理解がより深まります。
fileコマンドを使う上での注意点
fileコマンドは非常に便利ですが、完璧ではありません。特に以下のようなケースでは注意が必要です。
- 独自フォーマットや新しいファイル形式には対応していない場合がある
- 内容が複雑なファイルでは「data」などの曖昧な結果が返ることがある
- 日本語文字コードの判定は完全ではない(Shift_JISとUTF-8など)
したがって、判定結果を鵜呑みにせず、他のツールと併用して確認することも重要です。
まとめ
fileコマンドは、Linuxでファイルの正体を調べる際にとても役立つツールです。拡張子に惑わされることなく、中身を見て本質を判断できるという点で、初心者から上級者まで多くのユーザーにとって必要不可欠なコマンドといえるでしょう。
この記事で紹介した使い方やオプション、スクリプトとの連携方法などを活用すれば、ファイル管理や不具合調査がぐっと効率的になります。