はじめに
こんにちは!今回はfileコマンドについて学んでいきましょう。
fileは、ファイルの種類を自動判定してくれるコマンドです。「このファイル、何なんだろう?」って時に超便利。ファイル名の拡張子に騙されずに、ファイルの実際の内容を判定してくれます。
fileコマンドとは
fileコマンドは、指定したファイルの種類を判定し、その情報を表示する外部コマンドです。ファイルの内容を調べて、テキストファイルなのか、画像なのか、実行ファイルなのかなどを自動判別します。
ファイルの拡張子に関係なく、実際のファイル形式を判定するので、拡張子が間違っているファイルでも正しく認識できます。これめっちゃ便利!
基本構文
|
|
複数のファイルを同時に指定することもできます。
主なオプション
| オプション | 説明 |
|---|---|
-b |
ファイル名を表示しない |
-i |
MIMEタイプで表示 |
-L |
シンボリックリンク先を判定 |
-z |
圧縮ファイル内も判定 |
-s |
スパースファイルも表示 |
使用例
例1: 基本的な使い方(テキストファイル)
|
|
実行結果:
|
|
テキストファイルとして認識されました。
例2: 画像ファイルの判定
|
|
実行結果:
|
|
PNG画像ファイルとして認識され、詳細な情報も表示されます。
例3: 実行ファイルの判定
|
|
実行結果:
|
|
実行ファイルとして認識されました。
例4: 複数ファイルを同時に判定
|
|
実行結果:
|
|
複数のファイルを指定すると、全てが判定されます。
例5: ファイル名を表示しない(-bオプション)
|
|
実行結果:
|
|
ファイル名が表示されず、種類だけが出力されます。
例6: MIMEタイプで表示(-iオプション)
|
|
実行結果:
|
|
MIMEタイプ形式で表示されます。Webアプリケーションで便利!
例7: シンボリックリンク先を判定(-Lオプション)
|
|
実行結果:
|
|
シンボリックリンク先のファイルが判定されます。
例8: 圧縮ファイル内も判定(-zオプション)
|
|
実行結果:
|
|
圧縮ファイルの詳細情報も表示されます。
Tips・注意点
マジックナンバーで判定
fileコマンドはファイルの先頭にあるマジックナンバー(ファイル形式の識別子)で判定します。拡張子は一切見ません。
|
|
結果はPNG image dataとなります。
ディレクトリの判定
|
|
実行結果:
|
|
ディレクトリとしてちゃんと認識されます。
存在しないファイル
|
|
実行結果:
|
|
エラーメッセージが表示されます。
標準入力から判定
|
|
パイプから受け取ったデータも判定できます。
実践的な使い方
Webアプリケーションのファイルアップロード検証
|
|
アップロードされたファイルの実際の種類をMIMEタイプで確認できます。セキュリティのために拡張子だけに頼らず、実際の内容を検証するのが大切。
スクリプト内でファイル種別判定
|
|
スクリプト内でファイルの種類に応じて処理を分岐させられます。
ディレクトリ内すべてのファイルを一括判定
|
|
カレントディレクトリ内のすべてのファイルの種類が一度に表示されます。
拡張子が違うファイルを見つける
|
|
.txtという拡張子だが、実際にはテキストファイルではないファイルを見つけられます。
まとめ
fileコマンドのポイント:
- ファイルの種類を内容で判定する外部コマンド
- マジックナンバーで判定(拡張子は見ない)
-iオプションでMIMEタイプ表示-bオプションでファイル名非表示-Lオプションでシンボリックリンク先を判定- 複数ファイルを同時に指定可能
- セキュリティ検証に重要
fileコマンドは、ファイルの真の姿を教えてくれる信頼できるツール。拡張子に騙されずに、ファイルの内容を正しく理解しましょう!