fileコマンドでファイルの種類を調べる方法|MIME判定やスクリプトでの活用もコマンド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドF-J, ファイル・ディレクトリ管理コマンド > fileコマンドでファイルの種類を調べる方法|MIME判定やスクリプトでの活用もコマンド
「このファイル、一体何のファイルだ?」

Linuxでサーバーを運用していると、拡張子がないファイルや、見慣れない形式のファイルに出くわすことがあります。Windowsのように拡張子でファイルの種類を判断する習慣があると、拡張子のないLinuxファイルの正体がわからず困った経験はないでしょうか。

この記事では、fileコマンドの基本的な使い方から、MIME形式の判定、findコマンドとの組み合わせ、シェルスクリプトでの活用まで、実務で使える知識を体系的に解説します。
【この記事でわかること】 ・fileコマンドは拡張子でなくファイルの中身(マジックナンバー)を解析してファイル種別を判定する
・-i オプションで MIME タイプを表示し、スクリプトでの条件分岐に活用できる
・シンボリックリンクの実体を調べるには -L オプションを使う
・find コマンドと組み合わせることで、特定種別のファイルを一括検索できる
・シェルスクリプト内でファイル種別を自動判別し、処理を振り分ける実務テクニック

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜfileコマンドが必要なのか

Linuxではファイルの拡張子に特別な意味はありません。.txtという拡張子をつけたバイナリファイルも作れますし、拡張子なしのシェルスクリプトも普通に動きます。

つまり、拡張子だけを見てファイルの中身を判断するのは危険です。

fileコマンドは、ファイルの中身(マジックナンバーやバイト列)を解析して、そのファイルが何者なのかを教えてくれます。拡張子に頼らず、ファイルの実体を正確に判定できるのがfileコマンドの強みです。

具体的には、fileコマンドは/usr/share/misc/magic(またはmagic.mgc)というデータベースを参照して判定を行います。このデータベースには、各ファイル形式の先頭バイト列のパターンが登録されています。

fileコマンドの基本的な使い方

1. ファイルの種類を調べる

最もシンプルな使い方です。fileコマンドにファイルパスを渡すだけで、ファイルの種類を表示してくれます。

# テキストファイルの判定 $ file /etc/hosts /etc/hosts: ASCII text # バイナリ(実行ファイル)の判定 $ file /usr/bin/ls /usr/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked # ディレクトリの判定 $ file /tmp /tmp: directory # シェルスクリプトの判定 $ file /usr/bin/bashbug /usr/bin/bashbug: Bourne-Again shell script, ASCII text executable

このように、テキストファイル、バイナリ実行ファイル、ディレクトリ、シェルスクリプトなど、ファイルの種類を正確に教えてくれます。ELF(Executable and Linkable Format)はLinuxの実行ファイル形式です。

2. 複数ファイルをまとめて調べる

fileコマンドにはスペース区切りで複数のファイルを渡せます。

# 複数ファイルを一度に調べる $ file /etc/hosts /etc/hostname /etc/resolv.conf /etc/hosts: ASCII text /etc/hostname: ASCII text /etc/resolv.conf: ASCII text

大量のファイルを調べたい場合は、-fオプションでファイルリストを渡す方法が便利です。

# ファイルリストを作成 $ ls /etc/*.conf > /tmp/filelist.txt # リストに記載されたファイルをまとめて判定 $ file -f /tmp/filelist.txt

3. MIME形式で表示する(-i / --mime)

-iオプションを使うと、MIME(Multipurpose Internet Mail Extensions)形式でファイルタイプを表示します。Webサーバーの設定やスクリプトでの判定処理で活用できます。

# MIME形式で表示 $ file -i /etc/hosts /etc/hosts: text/plain; charset=us-ascii # HTMLファイル $ file -i /var/www/html/index.html /var/www/html/index.html: text/html; charset=utf-8 # バイナリファイル $ file -i /usr/bin/ls /usr/bin/ls: application/x-pie-executable; charset=binary

text/plaintext/htmlのようにMIMEタイプが表示され、さらにcharset=で文字コード情報も確認できます。

ファイル名部分を省略して、MIMEタイプだけを取得したい場合は-b(brief)オプションを組み合わせます。

# ファイル名を省略してMIMEタイプだけ表示 $ file -bi /etc/hosts text/plain; charset=us-ascii

4. シンボリックリンクの実体を調べる(-L)

通常、fileコマンドはシンボリックリンク(symlink)自体の情報を表示します。リンク先の実体を調べたい場合は-Lオプションを使います。

# シンボリックリンクの情報を表示(デフォルト) $ file /etc/alternatives/java /etc/alternatives/java: symbolic link to /usr/lib/jvm/java-11-openjdk-amd64/bin/java # -L でリンク先の実体を調べる $ file -L /etc/alternatives/java /etc/alternatives/java: ELF 64-bit LSB pie executable, x86-64

シンボリックリンクが多用される/etc/alternatives/ディレクトリなどで、実体のファイルタイプを確認したい場合に便利です。

5. 圧縮ファイルの中身を調べる(-z)

-zオプションを使うと、圧縮ファイルの中のファイルタイプまで調べてくれます。

# 圧縮ファイルの種類を確認(通常) $ file backup.tar.gz backup.tar.gz: gzip compressed data, last modified: Mon Mar 23 10:00:00 2026 # -z で中身まで確認 $ file -z backup.tar.gz backup.tar.gz: POSIX tar archive (gzip compressed data, last modified: Mon Mar 23 10:00:00 2026)

ログファイルのローテーション後に圧縮されたファイル(/var/log/messages-*.gzなど)の中身を確認する際にも使えます。

応用・実務Tips

findと組み合わせてファイルを分類する

findコマンドの-execオプションとfileコマンドを組み合わせると、特定のディレクトリ配下にあるファイルの種類を一括で調べられます。

# /usr/local/bin 配下の全ファイルの種類を調べる $ find /usr/local/bin -type f -exec file {} \; # テキストファイルだけを抽出する $ find /usr/local/bin -type f -exec file {} \; | grep "text" # ELFバイナリだけを抽出する $ find /usr/local/bin -type f -exec file {} \; | grep "ELF"

「サーバー移行の際に、どのファイルがスクリプトでどれがバイナリか分類したい」といった場面で重宝します。

シェルスクリプトでファイル種別を判定する

シェルスクリプトの中でfileコマンドの出力を使い、ファイルの種類に応じて処理を分岐させることができます。

#!/bin/bash # ファイルの種別に応じて処理を分岐するスクリプト TARGET="$1" if [ -z "$TARGET" ]; then echo "使い方: $0 ファイルパス" exit 1 fi FILETYPE=$(file -b "$TARGET") case "$FILETYPE" in *"text"*) echo "テキストファイルです: $FILETYPE" ;; *"ELF"*) echo "実行バイナリです: $FILETYPE" ;; *"gzip"*|*"bzip2"*|*"XZ"*) echo "圧縮ファイルです: $FILETYPE" ;; *"directory"*) echo "ディレクトリです" ;; *) echo "その他のファイルです: $FILETYPE" ;; esac

-bオプションを付けることでファイル名部分が省略され、スクリプト内での文字列比較がやりやすくなります。

MIME形式で判定したい場合は、file -biを使うとさらに正確な分岐が可能です。

# MIME形式で判定してContent-Typeとして利用する例 MIMETYPE=$(file -bi "$TARGET") echo "Content-Type: $MIMETYPE"

文字コードの確認に使う

fileコマンドの-iオプションは、ファイルの文字コード(charset)も表示してくれます。文字化けの原因調査で非常に役立ちます。

# 文字コードを確認 $ file -i config.txt config.txt: text/plain; charset=utf-8 $ file -i legacy_data.csv legacy_data.csv: text/plain; charset=iso-8859-1 $ file -i japanese.txt japanese.txt: text/plain; charset=utf-8

「このCSVファイル、文字化けするんだけど何のエンコーディングだっけ?」という場面で、まずfileコマンドで確認するのが定石です。ただし、fileコマンドの文字コード判定は万能ではなく、短いファイルや特殊なエンコーディングでは誤判定する場合もある点は覚えておきましょう。

トラブルシュート・エラー対処

「cannot open」が出た時の対処法

fileコマンドで「cannot open」エラーが出る場合、主に以下の原因が考えられます。

ファイルが存在しない:パスのタイプミスを確認しましょう
読み取り権限がない:sudoを付けて実行するか、権限を確認しましょう

# 権限がない場合のエラー例 $ file /etc/shadow /etc/shadow: regular file, no read permission # sudoを付けて実行 $ sudo file /etc/shadow /etc/shadow: ASCII text

/etc/shadowのようにroot権限でしか読めないファイルは、sudoを使って実行してください。

ファイルタイプが「data」と表示される場合

fileコマンドが「data」とだけ表示する場合、マジックデータベースにそのファイル形式のパターンが登録されていないことを意味します。

# 不明なバイナリファイル $ file unknown_file unknown_file: data

この場合の対処方法は以下の通りです。

hexdump や xxd で先頭バイトを確認する:マジックナンバーを手動で調べる
fileコマンドのバージョンを確認する:古いバージョンではマジックデータベースが不足している場合がある
ファイルが破損していないか確認する:途中でダウンロードが途切れたファイル等

# 先頭バイトを確認する $ xxd unknown_file | head -5 # fileコマンドのバージョンを確認 $ file --version

本記事のまとめ

fileコマンドの使い方を基本から応用まで解説しました。最後に、よく使うパターンを一覧表にまとめます。

やりたいこと コマンド
ファイルの種類を調べる file ファイル名
ファイル名を省略して結果だけ表示 file -b ファイル名
MIME形式で表示する file -i ファイル名
MIME形式でファイル名を省略して表示 file -bi ファイル名
シンボリックリンクの実体を調べる file -L ファイル名
圧縮ファイルの中身を調べる file -z ファイル名
ファイルリストから一括判定 file -f リストファイル名
ディレクトリ内の全ファイルを分類 find パス -type f -exec file {} \;

ファイルの正体をコマンドで確実に見抜けていますか?

コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。