前のレッスンでは touch を使い、拡張子を付けずにファイルを作成しました。Linux のファイル名は、内容を表す必要がありません。funny.gif というファイルが、必ずしも GIF 画像とは限りません。
コマンドライン · レッスン 6
file コマンド
名前や拡張子に頼らず、ファイルに含まれる可能性が高いデータの種類を識別する方法を学びます。
file コマンドでファイルを調べ、種類の推定結果を報告できます。
$ file banana.jpg
banana.jpg: JPEG image data
ファイル拡張子だけでは不十分な理由
Linux のツールは通常、ファイルの種類を判断するために拡張子を必要としません。シェルスクリプトを backup、テキストファイルを README と名付けることができ、画像に誤解を招く拡張子を付けることもできます。file コマンドは、ファイルシステムのメタデータや内容に含まれる認識可能なパターンなどを調べます。
$ file README
README: ASCII text
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable
結果は分類であり、保証ではありません。特殊、不完全、または損傷したファイルは、正確な種類ではなく data のような広い説明になる場合があります。
report.jpg というファイルに画像が入っているとは限りません。内容の種類を推定するコマンドはどれですか?
複数のファイルを確認する
一度に複数のファイルを確認できます。
$ file notes.txt image.png archive.tar.gz
notes.txt: ASCII text
image.png: PNG image data
archive.tar.gz: gzip compressed data
シェルのワイルドカードも渡せます。シェルが file の実行前に * を一致する名前へ展開します。
$ file *
現在のディレクトリで、* に一致する隠しファイル以外のすべての名前を file に調べさせるコマンドはどれですか?
MIME 情報を表示する
-i オプションは、メディアタイプと、分かる場合は文字セットを含む MIME 形式の情報を表示します。別のプログラムが text/html のような値を求める場合に便利です。
$ file -i index.html
index.html: text/html; charset=us-ascii
index.html の MIME 形式の情報を報告するコマンドはどれですか?
便利な `file` オプション
-i:MIME 形式の情報を表示する-b:簡潔なモードを使い、出力からファイル名を省く-L:シンボリックリンクをたどり、その対象を分類する-z:圧縮ファイルの内容を調べるよう試みる
たとえば次のようにします。
$ file -b notes.txt
ASCII text
notes.txt を分類し、出力からファイル名を省くコマンドはどれですか?
レッスン完了
file コマンド を完了しました
これで file を使い、ファイルに何が含まれる可能性が高いかを調べられるようになりました。
拡張子を信用せず、ファイルを分類する。
1 つのコマンドで複数のパス名を調べる。
MIME 形式の情報を要求する。
リンク、圧縮データ、出力ラベルの扱いを調整する。