連載
» 2017年03月09日 05時00分 UPDATE

Linux基本コマンドTips(92):【 strings 】コマンド――バイナリファイルの可読部分を表示する

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

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

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、バイナリファイルやデータファイル内の可読部分を表示する「strings」コマンドです。

stringsコマンドとは?

 「strings」は、バイナリファイルやデータファイルから“文字列”として読める箇所を表示するコマンドです。指定したバイナリ/データファイル内にある表示可能な文字列が、標準出力に出力されます。



stringsコマンドの書式

strings [オプション] ファイル

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




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

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

短いオプション 長いオプション 意味
-a/- --all ファイル全体をスキャンする
-f --print-file-name 文字列の前にファイル名を表示する
-n 文字数 --bytes=文字数 指定した文字数以上の連続した“文字列”を表示する(デフォルトは4文字)
-文字数 -n相当(-10は「-n 10」という意味になる)
-t 指定 --radix=指定 「o(8進数)」「x(16進数)」「d(10進数)」のいずれかを指定して、文字列の前に位置を表示する
-o 「-t o」相当
-T BFDNAME --target=BFDNAME システムのデフォルト形式以外のオブジェクトコード形式を指定する
-e 指定 --encoding=指定 文字サイズとエンディアンを「s」「S」「b」「l」「B」「L」のいずれかで指定する(s:7bit、S:8bit、b、l:16bit、B、L:32bit)


ファイル内の可読部分を表示する

 stringsコマンドは、バイナリファイルやデータファイルの可読部分を表示するコマンドです。

 バイナリファイルは「テキスト形式ではないファイル」なので、通常はその内容を読むことができません。バイナリファイルは実行形式であったり、専用のプログラムで表示したりするなど、何らかの処理をする必要があります。

 それでも、バイナリファイルの中には文字列としてそのまま読める箇所が存在することがあります。実行ファイルの場合はコンパイル時の情報や、「-h」オプションなどで表示されるヘルプメッセージ/エラーメッセージなど、データファイルの場合はプロパティなどの付帯情報が文字列で保存されていたりします。

コマンド実行例

strings ファイル名

(指定したファイルの可読部分を表示する)(画面1

strings -10 ファイル名

(10文字以上の可読部分を表示する)


画面1 画面1 stringsコマンドで画像ファイル(JPGファイル)内の文字列情報を表示した(情報量が多いので「head」コマンドで冒頭部分のみ表示しています)

 画面1では、画像ファイル(JPGファイル)内の文字列部分を表示しています。「Exif(Exchangeable image file format)」と呼ばれる撮影情報が表示されている様子が分かります。

 デフォルトでは、可読部分が4文字以上連続している箇所が表示されます。表示される文字数を変更したい場合は、「-文字数」または「-n 文字数」オプションで指定します。



コマンドのオプションを調べる

 Linuxで利用するコマンドは、ほとんどが「man」コマンドでマニュアルを参照したり、最低限、「-h」オプションなどでヘルプを表示したりすることができますが、「strings 実行ファイル名」でも何らかの情報を得ることができる場合があります(画面2)。なお、実行ファイルがどこにあるかは、「which」コマンドなどで調べることができます。

画面2 画面2 「which cal」で「cal」コマンドの場所を探し、「strings /usr/bin/cal」でcalコマンドの実行ファイルを表示した(!!は直前に実行したコマンドという意味で、`!!`部分は“直前に実行したコマンドの実行結果”に置き換わる)

 表示される文字量が多くて分かりにくい場合は「-n」オプションで文字数を調節したり、“オプションであれば「-」という文字が使われているだろう”と推測し、stringsコマンドの実行結果から「grep」コマンドで「-」という文字で絞り込んだりしてみるとよいでしょう。

コマンド実行例

strings ファイル名 | grep "-"

(stringsコマンドの実行結果から「-」という文字が含まれている行だけを表示)(画面3


画面3 画面3 「strings /usr/bin/cal」の結果を「grep」コマンドで絞り込む(CentOSの場合、aliasでgrepコマンドに--colorオプションが指定されているため、該当部分が赤い色で表示されている)


筆者紹介

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

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ジャパン

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

Focus

- PR -

RSSについて

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

メールマガジン登録

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