file コマンド

ファイルの内容を調べてファイルタイプを判定します。

概要

file コマンドは、ファイル名の拡張子に依存せず、ファイルの内容を調査してそのタイプを識別します。ファイルがテキスト、実行可能バイナリ、データファイル、またはその他のタイプであるかを判断するために、さまざまなテストを実行します。これは、拡張子が欠けていたり誤解を招くようなファイルを扱う場合に特に役立ちます。

オプション

-b, --brief

ファイル名の接頭辞なしで結果を表示します。

$ file -b document.txt
ASCII text

-i, --mime

従来のファイルタイプの説明の代わりにMIMEタイプを表示します。

$ file -i document.txt
document.txt: text/plain; charset=us-ascii

-z, --uncompress

圧縮ファイルの中身を調べようとします。

$ file -z archive.gz
archive.gz: ASCII text (gzip compressed data, was "notes.txt", last modified: Wed Apr 28 15:30:45 2021, from Unix)

-L, --dereference

シンボリックリンクをたどります。

$ file -L symlink
symlink: ASCII text

-s, --special-files

ブロックまたはキャラクタ特殊ファイルを読み込みます。

$ file -s /dev/sda1
/dev/sda1: Linux rev 1.0 ext4 filesystem data (extents) (large files)

使用例

複数のファイルを一度にチェックする

$ file document.txt image.png script.sh
document.txt: ASCII text
image.png:    PNG image data, 1920 x 1080, 8-bit/color RGB, non-interlaced
script.sh:    Bourne-Again shell script, ASCII text executable

バイナリファイルの調査

$ file /bin/ls
/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f15ad836be3339dec0e2e6a3c637e08e48aacbd, for GNU/Linux 3.2.0, stripped

ファイルエンコーディングの確認

$ file --mime-encoding document.txt
document.txt: us-ascii

ヒント:

findコマンドとの併用

findと組み合わせてディレクトリ構造内のファイルタイプを識別します:

$ find . -type f -exec file {} \;

ディスクパーティションの調査

file -sを使用してディスクパーティションとファイルシステムを調査します:

$ sudo file -s /dev/sd*

ファイルエンコーディングの確認

国際的なテキストを扱う場合、file --mime-encodingを使用して文字エンコーディングを判断します:

$ file --mime-encoding international_text.txt
international_text.txt: utf-8

よくある質問

Q1. fileコマンドはどれくらい正確ですか?

A. fileコマンドは一般的に正確ですが、完璧ではありません。パターンを調べるための「マジック」テストを使用しますが、特にカスタムや珍しいフォーマットのファイルタイプは誤認識される場合があります。

Q2. fileは暗号化されたファイルを検出できますか?

A. はい、fileは暗号化されたファイルを検出できることが多いですが、暗号化方法を特定せずに「データ」または「暗号化データ」としてのみ識別する場合があります。

Q3. fileはファイル拡張子の使用とどう違いますか?

A. ファイル拡張子(変更されたり誤解を招く可能性がある)に依存する代わりに、fileはファイルの実際の内容を調査してタイプを判断するため、より信頼性の高い識別が可能です。

Q4. fileはプログラミング言語のソースコードを識別できますか?

A. はい、fileは多くのプログラミング言語のソースファイルを識別できますが、時には単に「ASCIIテキスト」などと一般的に識別するだけの場合もあります。

参考文献

https://man7.org/linux/man-pages/man1/file.1.html

改訂履歴