本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「file」コマンドです。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は「file」コマンドでファイル形式を確認する方法を紹介します。
fileコマンドの概要 | 書式 | オプション一覧
「file」は、ファイル形式を調べるためのコマンドです。「file ファイル名」で、ファイルの形式が表示されます。テキストファイルの場合は、文字コードが表示されます。
fileコマンドの主なオプションは次の通りです。
短いオプション | 長いオプション | 意味 |
---|---|---|
-f | --files-from リスト | 検査するファイルの名前をリストファイルから読み込む(実行例2を参照) |
-L | --dereference | シンボリックリンクの参照先を調べる(実行例3を参照) |
-z | --uncompress | 圧縮ファイルの中も検査する(実行例4を参照) |
-b | --brief | 出力行の最初にファイル名を表示しない(簡易モード) |
-N | --no-pad | 出力を整列するためのファイル名への空白の追加を行わない |
「file ファイル名」でファイル形式が表示されます(画面1)。
file データファイル
※「egrep」は「grep -E」と同じ意味のコマンド(「-E」は検索文字列に拡張正規表現を使うオプション)で、CentOS環境の場合はシェルスクリプトで実現しています。「/usr/bin/egrep」の内容を見ると、最終的に「grep -E」を実行していることが分かります。
なお、データファイルの場合は「.jpg」や「.mp3」といった拡張子で判断してしまうのが一般的ですが、fileコマンドの場合は拡張子ではなく、あくまでも“ファイルの内容”から判断します(画面2)。
file データファイル
※筆者がテスト用に作成したファイルで、両者の内容は同じです。
「-f」オプションで、ファイルの一覧を指定することができます。例えば、Linuxの設定ファイル「/etc/shells」にはインストールされているシェルがリストアップされていますが、「file -f /etc/shells」で、それぞれのシェルのファイル形式を調べることができます(画面3)。
file -f リストファイル
「-L」オプションで、シンボリックリンクのリンク先を調べることができます。例えば、先ほどの実行結果から「/bin/csh」は、tcshへのシンボリックリンクであることが分かりました。「file -L /bin/csh」で、リンク先であるtcshのファイル形式が表示されます(画面4)。
file -L ファイル
「-z」オプションで、圧縮されているファイルの元の形式を調べることができます。
「man コマンド」ではコマンドの詳しい使い方(マニュアル)を参照することができますが、このmanコマンドが参照しているファイルはgzip形式で圧縮されたテキストファイルです。「file -z ファイル名」で、圧縮元のファイル形式が表示されます(画面5)。
file データファイル
fileコマンドでシェルスクリプトをはじめとするスクリプトファイルを調べると、「shell script」のように表示されます。
「file /bin/* | grep script」で「/bin」にあるファイルを全て調べ、grepコマンドで「script」と出力されたものを絞り込むことができます。先頭が大文字で「Script」になっている可能性も考えて、grepには大小文字を区別しない「-i」オプションを付けておくとより安心です。
なお、該当するものが多いため、画面6の実行例ではさらに「more」コマンドも組み合わせています。
file /bin/* | grep -i script
「type」コマンドや「which」コマンドを使うと、コマンドがどこにあるかを調べることができます(コマンドがどこにあるか探してみよう(連載:Linux再入門 第8回))。特に、whichコマンドはファイル名だけが表示されるので、バッククォート(`)で「whichコマンドの実行結果を、fileコマンドで調べる」という使い方ができます。
「`」(バッククォート)で囲まれた部分は、実行時にコマンドの結果で置き換えられます。従って、「file `which reboot`」を実行すると、「`which reboot`」部分は「which reboot」の実行結果である「/usr/sbin/reboot」に置き換わるので、「file /usr/sbin/reboot」が実行される、という意味になります(画面7)。
file `which コマンド名`
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 © ITmedia, Inc. All Rights Reserved.