この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:atom
更新日時:2026-06-12 15:30:20

タイトル: file ファイルの種類を表示
SEOタイトル: Linuxのfileコマンドの使い方|ファイルの種類・MIMEタイプを調べる

Linuxのfileコマンドは、指定したファイルの種類(ファイルタイプ)を判定して表示するコマンドです。テキストか画像か実行ファイルかといった中身の正体を、拡張子ではなくファイルの内部データから調べられます。

この記事の要点
  • file は「そのファイルが何者か」を表示するコマンドで、基本の書き方は file ファイル名 です。
  • 判定は拡張子ではなく、ファイル先頭などに含まれるマジックナンバー(識別用の特徴的なバイト列)を手がかりに行われます。
  • -iMIMEタイプ-b でファイル名を省いた簡潔な表示、-z で圧縮ファイルの中身の種類を調べられます。
  • 複数ファイルやワイルドカードをまとめて渡せるため、拡張子のないファイルや正体不明のファイルの確認に便利です。
  • シンボリックリンクのリンク先の種類を知りたいときは -L を使います。

 

fileコマンドとは

file は、ファイルの種類を調べて表示するコマンドです。多くのLinuxディストリビューションに標準で用意されています。Windowsなどでは「.txt はテキスト、.jpg は画像」のように拡張子で種類を判断することが一般的ですが、Linuxでは拡張子に決まった意味を持たせない運用も多く、拡張子だけでは中身が分からない場面があります。

file コマンドは拡張子に頼らず、ファイルの中身を実際に読み取って種類を推定します。判定の主な手がかりになるのがマジックナンバーと呼ばれるデータです。多くのファイル形式は、先頭付近に「この形式である」ことを示す特徴的なバイト列を持っています。file はこの特徴を照合し、テキスト・画像・実行ファイル・圧縮ファイルなどを区別します。テキストファイルの場合は、含まれる文字コード(ASCIIやUTF-8など)も併せて表示されることがあります。

そのため、拡張子を変更したファイルや、拡張子が付いていないファイルでも、中身に基づいた判定結果を得られるのが特徴です。

基本的な使い方

もっとも基本的な使い方は、調べたいファイル名を引数に渡す形です。

$ file ファイル名

 

実行すると、「ファイル名: 種類」という形式で結果が表示されます。次の例では、ディレクトリやシンボリックリンクが判定されています。

$ file bin

bin: directory

 

$ file initrd.img

initrd.img: symbolic link to boot/initrd.img-4.18.0-17-generic

 

このように、ディレクトリは directory、シンボリックリンクは symbolic link to ~ のように、ファイル以外の種類も判定されます。

主なオプション

用途に応じて、表示形式や判定方法を変えるオプションが用意されています。よく使われるものを示します。

オプション 意味
-i (または --mime 種類をMIMEタイプ(例: text/plainimage/png)の形式で表示する。文字コード情報が付くこともある。
-b--brief 先頭のファイル名を省き、種類だけを簡潔に表示する。スクリプトで結果を扱うときに便利。
-z--uncompress 圧縮ファイルを展開したと仮定し、中身(圧縮されているデータ)の種類も併せて判定する。
-L--dereference シンボリックリンク自体ではなく、リンク先のファイルの種類を判定する。
-f 一覧ファイル 調べたいファイル名を1行ずつ書いたリストを読み込み、まとめて判定する。
--help 利用できるオプションの一覧(ヘルプ)を表示する。

 

複数のファイルを一度に調べたい場合は、ファイル名を並べて指定したり、ワイルドカードを使ったりできます。

# 複数ファイルをまとめて判定

$ file memo.txt photo.png run.sh

 

# カレントディレクトリのすべてのファイルを判定

$ file *

 

種類ごとの判定例

代表的なファイルを file で調べると、次のような結果が表示されます。実際の出力は環境やファイルの内容によって変わりますが、おおむね以下のような傾向になります。

# テキストファイル

$ file memo.txt

memo.txt: ASCII text

 

# PNG画像

$ file photo.png

photo.png: PNG image data, 1280 x 720, 8-bit/color RGBA, non-interlaced

 

# 実行ファイル(ELFバイナリ)

$ file /bin/ls

/bin/ls: ELF 64-bit LSB pie executable, x86-64, ...

 

# MIMEタイプで表示

$ file -i photo.png

photo.png: image/png; charset=binary

 

画像や実行ファイルでは、画像の縦横サイズやビット深度、実行ファイルのアーキテクチャといった詳しい情報まで表示されることがあります。

拡張子に頼らないことの利点

ファイル名の拡張子は、利用者が自由に付け替えられます。たとえば中身が画像のファイルに .txt という拡張子が付いていても、ファイル名だけ見れば「テキスト」と誤解しかねません。

file は中身を読み取って判定するため、こうした拡張子と中身の食い違いを見抜くのに役立ちます。次の例では、拡張子が .txt でも、中身がPNG画像であれば画像として判定されます。

$ file picture.txt

picture.txt: PNG image data, 1280 x 720, 8-bit/color RGBA, non-interlaced

 

拡張子のないファイルや、ダウンロードしたばかりで正体が分からないファイルの確認、シェルスクリプトでファイルの種類によって処理を分けたい場面などで活用できます。

使うときの注意点

注意したいポイント
  • 中身が空のファイルは判定の手がかりがないため、empty のように表示されます。
  • マジックナンバーに合致するパターンがない場合は、data のように「種類を特定できない汎用的なデータ」として扱われることがあります。表示はあくまで推定であり、必ずしも厳密な形式名とは限りません。
  • シンボリックリンクをそのまま指定すると、リンク自体(symbolic link to ~)が表示されます。リンク先の種類を知りたいときは -L を付けます。
  • 判定はファイルの中身に基づくため、拡張子が正しいかどうかの保証にはなりません。逆に、表示された種類が常に安全・正当なファイルであることを保証するものでもありません。

 

シンボリックリンクのリンク先を判定する例を示します。

# リンク自体を表示

$ file link-to-log

link-to-log: symbolic link to /var/log/syslog

 

# リンク先を判定

$ file -L link-to-log

link-to-log: ASCII text

 

よくある質問

Q. fileコマンドの判定結果はどのくらい正確ですか。
A. 多くの一般的な形式は、マジックナンバーをもとに高い精度で判定されます。ただし結果は推定であり、特徴的なパターンを持たないファイルや独自形式のファイルでは、data のように大まかな表示になったり、判定が一致しない場合もあります。重要な判断では、ほかの方法と併せて確認すると安心です。

Q. 拡張子を変えても種類を見抜けますか。
A. はい。file はファイル名ではなく中身を読み取って判定するため、拡張子を変更しても中身に応じた種類が表示されます。拡張子と実体の食い違いを確認する用途に向いています。

Q. 圧縮ファイルの中身の種類を知ることはできますか。
A. -z オプションを使うと、圧縮されている内側のデータについても種類の判定を試みます。圧縮形式そのものだけでなく、中に格納されたデータの種類を確認したいときに役立ちます。