概要
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`が常に内部を確認できない場合があります。必要に応じて、まず圧縮を解除して確認してください。