コマンド
strings
ファイルから文字列と思われる部分を探して表示する。
それって何の役に立つんだ、と思うかもしれないが、
- ソースやマニュアルのないプログラムのオプションを探す
- ソースやマニュアルのないプログラムのバージョンを調べる
などの用途がある。例えば bind (実行ファイル名は named) のバージョンは、オンラインマニュアルに記述されておらず、-v や --version などのオプションも存在しない。そういうときは
% strings /usr/sbin/named | grep 'named [0-9]'
@(#)named 4.9.7-T1B Wed Jul 22 06:46:59 GMT 1998 ....
named 4.9.7-T1B Wed Jul 22 06:46:59 GMT 1998
などと、バイナリファイルから直接文字列を拾い出すことができる。
-n num 表示する文字列の最低限の長さを指定する。
例えば -n 10なら10文字以上の文字列を拾い出して表示する。デフォルトは4。
-f 拾い出した文字列とともに、ファイル名も表示する。
例えば、どのコマンドかはわからないが `load average' という文字列を含むコマンドを調べたいときは
% strings -f /usr/bin/* | grep -i 'load average'
/usr/bin/top:load averages
/usr/bin/uptime:, no load average information available
/usr/bin/uptime:, load averages:
/usr/bin/w:, no load average information available
/usr/bin/w:, load averages:
とすればよい。-f オプションを付けないと、どのコマンドに含まれている文字列なのかが表示されない。
また、バイナリデータなのかバイナリプログラムなのかわからない、得体の知れないファイルの正体を調べるときにも使われる。file コマンドも併用すべし。
バイナリファイルであっても、テキストファイルのように grep したい場合は、grep -a または grep --text を使うとよいかもしれない。