連載
» 2016年05月10日 05時00分 UPDATE

Linux基本コマンドTips(12):【 file 】コマンド――ファイル形式を確認する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「file」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は「file」コマンドでファイル形式を確認する方法を紹介します。

fileコマンドとは?

 「file」は、ファイル形式を調べるためのコマンドです。「file ファイル名」で、ファイルの形式が表示されます。テキストファイルの場合は、文字コードが表示されます。


fileコマンド書式

file [オプション] ファイル1 ファイル2 ファイル3……

※[ ]は省略可能な引数を示しています



fileコマンドの主なオプション

 fileコマンドの主なオプションは次の通りです。

短いオプション 長いオプション 意味
-f --files-from リスト 検査するファイルの名前をリストファイルから読み込む(実行例2を参照)
-L --dereference シンボリックリンクの参照先を調べる(実行例3を参照)
-z --uncompress 圧縮ファイルの中も検査する(実行例4を参照)
-b --brief 出力行の最初にファイル名を表示しない(簡易モード)
-N --no-pad 出力を整列するためのファイル名への空白の追加を行わない


ファイルの形式を表示する

 「file ファイル名」でファイル形式が表示されます(画面1)。

コマンド実行例

file データファイル


画面1 画面1 「file /usr/bin/grep」と「file /usr/bin/egrep」でそれぞれのファイル形式を調べる(※)

※「egrep」は「grep -E」と同じ意味のコマンド(「-E」は検索文字列に拡張正規表現を使うオプション)で、CentOS環境の場合はシェルスクリプトで実現しています。「/usr/bin/egrep」の内容を見ると、最終的に「grep -E」を実行していることが分かります。



 なお、データファイルの場合は「.jpg」や「.mp3」といった拡張子で判断してしまうのが一般的ですが、fileコマンドの場合は拡張子ではなく、あくまでも“ファイルの内容”から判断します(画面2)。

コマンド実行例

file データファイル


画面2 画面2 「file screenshot001.png」と「file screenshot001.jpg」でそれぞれのファイル形式を調べる(※)

※筆者がテスト用に作成したファイルで、両者の内容は同じです。





ファイルのリストから調べる

 「-f」オプションで、ファイルの一覧を指定することができます。例えば、Linuxの設定ファイル「/etc/shells」にはインストールされているシェルがリストアップされていますが、「file -f /etc/shells」で、それぞれのシェルのファイル形式を調べることができます(画面3)。

コマンド実行例

file -f リストファイル


画面3 画面3 「file -f /etc/shells」で設定ファイル「/etc/shells」にリストアップされているファイルの形式を調べる


シンボリックリンクの参照先を調べる

 「-L」オプションで、シンボリックリンクのリンク先を調べることができます。例えば、先ほどの実行結果から「/bin/csh」は、tcshへのシンボリックリンクであることが分かりました。「file -L /bin/csh」で、リンク先であるtcshのファイル形式が表示されます(画面4)。

コマンド実行例

file -L ファイル


画面4 画面4 「file -L /bin/csh」で「/bin/csh」のリンク先(tcsh)のファイル形式を調べる


圧縮されているファイルを調べる

 「-z」オプションで、圧縮されているファイルの元の形式を調べることができます。

 「man コマンド」ではコマンドの詳しい使い方(マニュアル)を参照することができますが、このmanコマンドが参照しているファイルはgzip形式で圧縮されたテキストファイルです。「file -z ファイル名」で、圧縮元のファイル形式が表示されます(画面5)。

コマンド実行例

file データファイル


画面5 画面5 「file -z /usr/share/man/ja/man1/file.1.gz」で圧縮元のファイル形式を調べる


grepコマンドと組み合わせてスクリプトファイルを一覧表示する

 fileコマンドでシェルスクリプトをはじめとするスクリプトファイルを調べると、「shell script」のように表示されます。

 「file /bin/* | grep script」で「/bin」にあるファイルを全て調べ、grepコマンドで「script」と出力されたものを絞り込むことができます。先頭が大文字で「Script」になっている可能性も考えて、grepには大小文字を区別しない「-i」オプションを付けておくとより安心です。

 なお、該当するものが多いため、画面6の実行例ではさらに「more」コマンドも組み合わせています。

コマンド実行例

file /bin/* | grep -i script


画面6 画面6 「file /bin/* | grep script | more」で「/bin」下にあるスクリプトを一覧表示する


whichコマンドと組み合わせてコマンドのファイル形式を調べる

 「type」コマンドや「which」コマンドを使うと、コマンドがどこにあるかを調べることができます(コマンドがどこにあるか探してみよう(連載:Linux再入門 第8回))。特に、whichコマンドはファイル名だけが表示されるので、バッククォート(`)で「whichコマンドの実行結果を、fileコマンドで調べる」という使い方ができます。

 「`」(バッククォート)で囲まれた部分は、実行時にコマンドの結果で置き換えられます。従って、「file `which reboot`」を実行すると、「`which reboot`」部分は「which reboot」の実行結果である「/usr/sbin/reboot」に置き換わるので、「file /usr/sbin/reboot」が実行される、という意味になります(画面7)。

コマンド実行例

file `which コマンド名`


画面7 画面7 「file `which reboot`」でrebootの場所を探し、そのファイル形式を調べる(「/usr/sbin/reboot」はシンボリックリンクだと分かったので、さらに「file -L `which reboot`」でリンク先も調べている)

ワンポイント

 CentOSでは、whichコマンドでエイリアス定義とコマンド本体の両方が表示されるように設定されています。

 例えば「which ls」では、lsのエイリアス定義とコマンド本体の場所である「/usr/bin/ls」が表示されます。whichコマンドを今回のような用途で使用したい場合は、「file `/bin/which ls`」のように指定するか、「unalias which」でwhichコマンドのエイリアス定義を一時的に削除します。

 エイリアス定義はbashの設定ファイル(具体的には「/etc/profile」から呼び出される「/etc/profile.d/」下のファイル)で設定されているので、ログインし直すとwhichのエイリアス設定は元に戻ります。

 whichコマンドを常に“オプションなし”で使いたい場合は、ユーザー用の設定ファイル(今回の場合、具体的にはホームディレクトリの「.bash_profile」)に「unalias which」と書いた行を追加するとよいでしょう。




筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。