ホーム > ファイル・ディレクトリ管理 > file

file: ファイルタイプ識別のガイド

拡張子ではなく実際のバイト内容を検査して、ファイルのタイプやMIME情報を判別します。libmagicデータベースを使用します。

概要

fileコマンドは、ファイルの拡張子に依存せず、コンテンツを分析してタイプを判別します。テキスト/バイナリかどうか、実行可能ファイルのフォーマット(ELF)、圧縮ファイル、画像/オーディオなど、様々なフォーマットを認識し、MIMEタイプとエンコーディングも出力できます。

主な特徴

  • 拡張子に関わらず実際の内容で判別
  • MIMEタイプと文字エンコーディングの出力が可能
  • シンボリックリンクの対象またはリンク自体を判別可能
  • 圧縮ファイル内部まで確認を試みる (-z)

活用シナリオ例

fileコマンドが特に役立つ状況です。

  • 拡張子が間違っているファイルの実際のフォーマット識別(例:.jpgに偽装したPDF)
  • 拡張子がないファイルのタイプ把握
  • スクリプトでファイルタイプに応じて処理を分岐
  • ウェブ/ネットワークサービスでアップロードファイルのMIMEタイプ判別
  • シンボリックリンク自体または対象の判別
  • 圧縮ファイル内部コンテンツの分析
  • セキュリティ分析・フォレンジックにおける実行ファイルフォーマットの識別

主要オプション

状況別に頻繁に使用するオプションをグループ化しました。

1) 基本動作 & 出力制御

2) 入力/対象指定

3) マジックデータベース/除外/デバッグ

4) ヘルプ/バージョン

生成されたコマンド:

コマンドを組み合わせてみてください。

説明:

`file` コマンドを実行します。

これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。

使用例

よく使うパターンを例としてまとめました。

基本判別

file /bin/ls

ファイルタイプを基本形式で出力

ファイル名なしで簡易出力

file -b /bin/ls

スクリプトで処理しやすい簡易出力

MIMEタイプ/エンコーディング

file --mime-type index.html && file --mime-encoding README.md

ウェブ/パイプラインでのタイプ判別に有用

圧縮内部まで確認

file -z backup.tar.gz

圧縮ファイルの実際の内容を推定

シンボリックリンク自体 vs 対象

file -h symlink && file -L symlink

リンク自体を検査(-h)するか、対象をたどって検査(-L)します。

findと組み合わせてMIMEタイプを一括確認

find . -type f -print0 | xargs -0 file --mime-type

NUL区切り文字を使用して、空白/改行を含むファイル名も安全に渡します。

マジックデータベースの場所

システムとディストリビューションによってパスが異なる場合があります。

🪄 デフォルトのコンパイル済みマジックDB

/usr/share/file/magic.mgc

ほとんどのディストリビューションのデフォルトパス

📁 ソースマジックディレクトリ

/usr/share/file/magic/

コンパイル前のソースルール(.mgcではないオリジナル)

終了コード

スクリプトで分岐処理を行う際に参考にしてください。

コード 意味
0 正常: 判別成功(または要求された操作が成功)
1 一般的な問題: ファイルが存在しない/アクセスできない/判別失敗など
2 使用法エラーまたはシステムエラー

インストール

ほとんどの場合デフォルトで搭載されていますが、ない場合は以下でインストールしてください。

Debian/Ubuntu

sudo apt update && sudo apt install -y file

RHEL/CentOS/Fedora

sudo dnf install -y file

Arch Linux

sudo pacman -S --needed file

openSUSE

sudo zypper install -y file

ヒント & 注意事項

  • `--mime-type`と`--mime-encoding`を明示的に使用することで、ディストリビューション/バージョンによる`-i/--mime`の動作の違いを避けることができます。
  • シンボリックリンクの処理:リンク自体を確認するには`-h`を、対象ファイルを確認するには`-L`を使用してください。
  • 大量処理の際は`find -print0 | xargs -0`パターンを使用すると、空白/改行を含むファイル名も安全に処理できます。
  • 圧縮フォーマットによっては`-z`が常に内部を確認できない場合があります。必要に応じて、まず圧縮を解除して確認してください。

関連するコマンド

機能的に類似しているか、よく一緒に使われるコマンドです。


同じカテゴリのコマンド