Linuxで「このファイルは何の形式なのか」「拡張子が付いていないファイルの中身は何か」を調べたいときは、fileコマンドを使用します。
Windowsでは拡張子を見てファイルの種類を判断することが多いですが、Linuxでは拡張子が付いていないファイルも珍しくありません。また、拡張子が付いていても、実際の内容と一致しているとは限りません。
fileコマンドを使うと、ファイルの内容を調べて、テキストファイル、画像ファイル、圧縮ファイル、実行ファイル、シンボリックリンクなどの種類を判定できます。
この記事では、Linux初心者でも実際に操作できるように、fileコマンドの基本的な使い方、主なオプション、MIMEタイプや文字コードの確認方法、拡張子との違い、判定結果の見方まで実例付きで解説します。
- fileコマンドとは
- fileコマンドの基本構文
- テキストファイルの種類を確認する方法
- 拡張子がないファイルを確認する方法
- 拡張子を変更しても実体は変わらない
- 画像ファイルの種類を確認する方法
- 圧縮ファイルの種類を確認する方法
- 実行ファイルの種類を確認する方法
- シェルスクリプトの種類を確認する方法
- Pythonスクリプトを確認する方法
- 複数のファイルをまとめて確認する方法
- ファイル名を表示せず判定結果だけ表示する方法
- MIMEタイプを確認する方法
- MIMEタイプと文字コードをまとめて確認する方法
- 文字コードを確認する方法
- シンボリックリンクを確認する方法
- 圧縮ファイルの内部形式を調べる方法
- デバイスファイルを調べる方法
- fileコマンドの主なオプション
- fileコマンドはどのように種類を判定しているのか
- fileコマンドと拡張子の違い
- file・stat・lsコマンドの違い
- fileコマンドの実用例
- fileコマンドでよくあるエラーと対処法
- 利用環境による表示の違い
- よくある質問
- まとめ
fileコマンドとは
fileは、指定したファイルの種類や形式を判定するLinuxコマンドです。
ファイル名や拡張子だけではなく、ファイルの内容や先頭部分に記録された特徴を調べて判定します。
主に次のような情報を確認できます。
- 通常のテキストファイルか
- 画像・音声・動画などの形式
- ZIPやgzipなどの圧縮形式
- ELF形式の実行ファイルか
- シェルスクリプトやPythonスクリプトか
- シンボリックリンクか
- 文字コードがUTF-8かASCIIか
- MIMEタイプが何か
拡張子のないファイルを調査するときや、ダウンロードしたファイルの実体を確認するとき、サーバー上の不明なファイルを調査するときに役立ちます。
fileコマンドの基本構文
fileコマンドの基本構文は次のとおりです。
file [オプション] ファイル名
たとえば、sample.txtの種類を確認する場合は次のように実行します。
file sample.txt
実行結果の例です。
sample.txt: Unicode text, UTF-8 text
ファイル名の後ろに、そのファイルの種類や文字コードが表示されます。
テキストファイルの種類を確認する方法
動作確認用のテキストファイルを作成します。
echo "Hello Linux" > sample.txt
fileコマンドで確認します。
file sample.txt
実行結果の例です。
sample.txt: ASCII text
日本語を含むファイルでは、次のように表示されることがあります。
sample.txt: Unicode text, UTF-8 text
結果はファイルの内容や利用している環境によって異なります。
拡張子がないファイルを確認する方法
Linuxでは、拡張子がないファイルも多く存在します。
次のように拡張子のないファイルを作成します。
echo "Linux command" > sample
種類を確認します。
file sample
実行結果の例です。
sample: ASCII text
拡張子がなくても、内容を調べてテキストファイルだと判定できます。
拡張子を変更しても実体は変わらない
ファイル名の拡張子を変更しても、ファイルの中身や形式は変わりません。
たとえば、テキストファイルを画像のような名前へ変更します。
mv sample.txt sample.jpg
fileコマンドで確認します。
file sample.jpg
実行結果の例です。
sample.jpg: Unicode text, UTF-8 text
ファイル名は.jpgですが、中身はテキストファイルのままです。
拡張子はファイル名の一部であり、ファイル形式そのものを決めるものではありません。
画像ファイルの種類を確認する方法
画像ファイルへfileコマンドを実行すると、画像形式や解像度などが表示される場合があります。
file photo.png
実行結果の例です。
photo.png: PNG image data, 1000 x 666, 8-bit/color RGB, non-interlaced
JPEG画像の場合は次のように表示されます。
file photo.jpg
photo.jpg: JPEG image data, JFIF standard 1.01
画像が壊れている場合や、拡張子と実体が異なる場合の確認にも利用できます。
圧縮ファイルの種類を確認する方法
圧縮ファイルやアーカイブファイルの形式も確認できます。
file archive.zip
実行結果の例です。
archive.zip: Zip archive data, at least v2.0 to extract
gzip形式の場合は次のように表示されます。
file archive.gz
archive.gz: gzip compressed data
tarアーカイブの場合は次のように表示されます。
file archive.tar
archive.tar: POSIX tar archive
拡張子が間違っている圧縮ファイルを調査するときにも便利です。
実行ファイルの種類を確認する方法
Linuxの実行ファイルへfileコマンドを実行すると、ELF形式やCPUアーキテクチャなどを確認できます。
file /bin/ls
実行結果の例です。
/bin/ls: ELF 64-bit LSB pie executable, x86-64, dynamically linked
主な表示項目の意味は次のとおりです。
| 表示 | 意味 |
|---|---|
ELF |
Linuxで一般的に使われる実行ファイル形式 |
64-bit |
64ビット向けの実行ファイル |
x86-64 |
x86-64 CPU向けに作成されている |
dynamically linked |
共有ライブラリを利用する実行ファイル |
異なるCPU向けに作られた実行ファイルを実行できない場合などの調査に役立ちます。
シェルスクリプトの種類を確認する方法
シェルスクリプトを作成します。
printf '#!/bin/bash\necho "Hello"\n' > hello.sh
fileコマンドで確認します。
file hello.sh
実行結果の例です。
hello.sh: Bourne-Again shell script, ASCII text executable
先頭行のシェバンを確認し、Bashスクリプトとして判定されます。
Pythonスクリプトを確認する方法
Pythonスクリプトも同様に判定できます。
printf '#!/usr/bin/env python3\nprint("Hello")\n' > hello.py
file hello.py
実行結果の例です。
hello.py: Python script, ASCII text executable
ただし、ファイルの内容やシェバンの有無によっては、単なるテキストファイルとして判定されることもあります。
複数のファイルをまとめて確認する方法
複数のファイルを指定すると、まとめて種類を確認できます。
file sample.txt photo.png archive.zip
実行結果の例です。
sample.txt: Unicode text, UTF-8 text
photo.png: PNG image data, 1000 x 666, 8-bit/color RGB
archive.zip: Zip archive data
カレントディレクトリ内のファイルをまとめて調べる場合は、ワイルドカードを使用できます。
file *
ただし、ファイル数が非常に多いディレクトリでは大量の結果が表示されるため注意してください。
ファイル名を表示せず判定結果だけ表示する方法
-bオプションを使用すると、ファイル名を省略して判定結果だけを表示できます。
file -b sample.txt
実行結果の例です。
Unicode text, UTF-8 text
シェルスクリプトで判定結果だけを変数へ保存したい場合などに便利です。
type=$(file -b sample.txt)
echo "$type"
MIMEタイプを確認する方法
MIMEタイプだけを確認したい場合は、--mime-typeオプションを使用します。
file --mime-type sample.txt
実行結果の例です。
sample.txt: text/plain
PNG画像の場合は次のように表示されます。
file --mime-type photo.png
photo.png: image/png
MIMEタイプは、Webサーバーやメール、ファイルアップロード処理などで、データの種類を表すために使われます。
MIMEタイプと文字コードをまとめて確認する方法
-iオプションを使うと、MIMEタイプと文字コードをまとめて確認できます。
file -i sample.txt
実行結果の例です。
sample.txt: text/plain; charset=utf-8
-iは、環境によっては--mimeと同等の動作になります。
文字コードを確認する方法
文字コードだけを確認する場合は、--mime-encodingを使用します。
file --mime-encoding sample.txt
実行結果の例です。
sample.txt: utf-8
文字化けが発生しているファイルを調査するときに役立ちます。
ただし、短いファイルや英数字だけのファイルでは、UTF-8で作成していてもus-asciiと判定される場合があります。ASCII文字はUTF-8と互換性があるためです。
シンボリックリンクを確認する方法
シンボリックリンクを作成します。
ln -s sample.txt symbolic.txt
通常のfileコマンドでは、リンク自体が表示されます。
file symbolic.txt
実行結果の例です。
symbolic.txt: symbolic link to sample.txt
リンク先のファイル形式を確認する
-Lオプションを使用すると、シンボリックリンクをたどってリンク先の種類を判定します。
file -L symbolic.txt
実行結果の例です。
symbolic.txt: Unicode text, UTF-8 text
リンク自体を調べたい場合は通常のfile、リンク先の実体を調べたい場合はfile -Lを使用します。
圧縮ファイルの内部形式を調べる方法
-zオプションを使用すると、圧縮ファイルを展開可能な範囲で調べ、内部データの種類も表示します。
file -z archive.gz
実行結果の例です。
archive.gz: ASCII text (gzip compressed data)
環境や圧縮形式によって、表示内容は異なります。
デバイスファイルを調べる方法
-sオプションを使うと、ブロックデバイスやキャラクターデバイスなどの特殊ファイルも読み取って判定します。
sudo file -s /dev/sda1
ファイルシステムが存在する場合は、種類やUUIDなどが表示されることがあります。
デバイスファイルへ使用する場合は、対象を間違えないよう注意してください。通常のファイル確認では-sを付ける必要はありません。
fileコマンドの主なオプション
| オプション | 説明 |
|---|---|
-b |
ファイル名を表示せず判定結果だけを表示する |
-i |
MIMEタイプと文字コードを表示する |
--mime-type |
MIMEタイプだけを表示する |
--mime-encoding |
文字コードだけを表示する |
-L |
シンボリックリンクのリンク先を判定する |
-z |
圧縮ファイルの内部データも調べる |
-s |
特殊ファイルやデバイスファイルも読み取る |
-k |
最初の判定だけで終了せず、該当する判定結果を続けて表示する |
fileコマンドはどのように種類を判定しているのか
fileコマンドは、主に次の順序でファイルを調べます。
- ファイルが存在するか、ディレクトリやリンクなどの特殊ファイルかを確認する
- マジックナンバーなど、ファイル先頭の特徴を調べる
- 文字列として読み取れるかを確認し、テキストや文字コードを判定する
画像や圧縮ファイル、実行ファイルには、形式を識別するための特徴的なデータが含まれていることがあります。
fileコマンドは、システムに用意されたmagicデータベースと照合して種類を判定します。
fileコマンドと拡張子の違い
| 比較項目 | 拡張子 | fileコマンド |
|---|---|---|
| 判定方法 | ファイル名を見る | ファイルの内容を調べる |
| 拡張子なし | 種類を判断しにくい | 判定できる場合がある |
| 拡張子が間違っている場合 | 誤認しやすい | 実体を判定できる場合がある |
| 文字コード | 確認できない | 確認できる場合がある |
| MIMEタイプ | 確認できない | 確認できる |
拡張子は目安として便利ですが、正確に確認したい場合はfileコマンドを使用します。
file・stat・lsコマンドの違い
| コマンド | 主な用途 |
|---|---|
file |
ファイルの種類や形式を確認する |
stat |
サイズ、権限、所有者、inode、日時などを詳しく確認する |
ls -l |
複数ファイルの基本情報を一覧表示する |
「何のファイルか」を調べるならfile、「どのような属性を持つか」を調べるならstat、「一覧で確認する」ならls -lが適しています。
fileコマンドの実用例
ダウンロードしたファイルの実体を確認する
file download_file
拡張子が付いていない場合や、ファイル名から形式が分からない場合に利用できます。
アップロードされたファイルのMIMEタイプを確認する
file --mime-type upload_file
Webアプリケーションやサーバー運用で、ファイルの種類を確認するときに便利です。
ディレクトリ内のファイル形式をまとめて確認する
file *
拡張子と実体が一致しているかをまとめて確認できます。
実行できないバイナリの種類を調べる
file application
32ビット・64ビットの違いや、CPUアーキテクチャが実行環境と合っているかを調査できます。
文字化けしたファイルの文字コードを確認する
file -i data.txt
表示された文字コードを参考に、iconvなどで変換できます。
fileコマンドでよくあるエラーと対処法
No such file or directory
file: cannot open 'sample.txt' (No such file or directory)
指定したファイルが存在しないか、パスが間違っています。
pwd
ls -l
現在のディレクトリとファイル名を確認してください。
Permission denied
file: cannot open 'sample.dat' (Permission denied)
対象ファイルまたは親ディレクトリへアクセスする権限がありません。
ls -l sample.dat
namei -l /path/to/sample.dat
ファイルとパス上のディレクトリに必要な権限があるか確認します。
dataとしか表示されない
sample.bin: data
既知の形式として判定できないバイナリデータの場合は、単にdataと表示されることがあります。
この場合は、次の方法を組み合わせて調査します。
hexdump -C sample.bin | head
strings sample.bin | head
stat sample.bin
fileコマンドだけですべてのファイル形式を特定できるわけではありません。
文字コードの判定結果が期待と違う
文字コード判定は、ファイルの内容から推測されます。
英数字だけの短いファイルでは、UTF-8で保存していてもus-asciiと表示されることがあります。日本語などの非ASCII文字を含めて確認すると、判定結果が変わる場合があります。
利用環境による表示の違い
fileコマンドの判定結果は、インストールされているfileコマンドのバージョンやmagicデータベースによって異なる場合があります。
そのため、Ubuntu、Debian、CentOS Stream、Rocky Linux、AlmaLinuxなどで、表示される表現が完全に同じになるとは限りません。
利用しているバージョンは次のコマンドで確認できます。
file --version
よくある質問
fileコマンドは拡張子を見て判定していますか?
いいえ。基本的にはファイルの内容や特徴を調べて判定します。そのため、拡張子がなくても種類を判定できる場合があります。
拡張子と判定結果が違うのはなぜですか?
拡張子はファイル名の一部にすぎないためです。名前を変更してもファイルの実体は変わりません。
MIMEタイプだけを確認するにはどうすればよいですか?
file --mime-type ファイル名
と実行します。
文字コードを確認するにはどうすればよいですか?
file --mime-encoding ファイル名
または次のコマンドを使用します。
file -i ファイル名
シンボリックリンクのリンク先を調べられますか?
-Lオプションを付けると、リンク先ファイルの種類を判定できます。
file -L symbolic.txt
dataと表示された場合は壊れていますか?
必ずしも壊れているとは限りません。fileコマンドが既知の形式として判定できなかったバイナリデータでもdataと表示されます。
ディレクトリにもfileコマンドを使用できますか?
はい。ディレクトリを指定すると、directoryと表示されます。
file /var/log
UbuntuやCentOS Streamでも使えますか?
はい。一般的なLinuxディストリビューションで利用できます。最小構成の環境でインストールされていない場合は、パッケージ管理コマンドでfileパッケージを追加します。
まとめ
fileコマンドは、Linuxでファイルの種類や形式を確認するためのコマンドです。
基本的な使い方は次のとおりです。
file ファイル名
判定結果だけを表示する場合は-bを使用します。
file -b sample.txt
MIMEタイプを確認する場合は、次のように実行します。
file --mime-type sample.txt
MIMEタイプと文字コードをまとめて確認する場合は-iを使用します。
file -i sample.txt
シンボリックリンクのリンク先を判定する場合は-Lを使用します。
file -L symbolic.txt
Linuxでは拡張子が付いていないファイルも多いため、ファイルの実体を確認できるfileコマンドは非常に重要です。
不明なファイルを見つけたときや、拡張子と中身が一致しているか確認したいときは、最初にfileコマンドを実行してみましょう。




コメント