UNIX/Linuxの部屋 stringsコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド 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 を使うとよいかもしれない。
>> Solaris10オンラインマニュアル(man) Solaris10 strings(1)
>> FreeBSDオンラインマニュアル(man) FreeBSD strings(1)
>> Linuxオンラインマニュアル(man) Linux strings(1)