エディタでファイルを開いてみると、 バイナリの内容が判読できないことがありますか?
Linuxの "strings"コマンドを使用すると、人間が判読できる文字を任意のファイルで表示することができます。
"strings"コマンドを使用する主な目的は、あなたが見ているファイルの種類を調べることですが、テキストを抽出するために使用することもできます。 たとえば、ファイルを奇妙なバイナリ形式で保存する独自のプログラムからのファイルがある場合、 "文字列"を使用してファイルに入れたテキストを抽出することができます。
Stringsコマンドの使用例
stringsコマンドの機能を実証するには、LibreOffice Writerを使用してドキュメントを作成することが有効です。
LibreOffice Writerを開いてテキストを入力し、 標準のODT形式で保存してください。
ターミナルウィンドウを開き (CTRL、ALT、Tキーを同時に押す) 、catコマンドを使用して次のようにファイルを表示します。
cat yourfilename.odt | もっと
(yourfilename.odtを作成したファイルの名前に置き換えます)
あなたが見るものは、判読不能なテキストの全体の壁です。
スペースバーを押してファイルをスクロールします。 散発的にファイル全体にあなたが入力したテキストの一部が表示されます。
stringsコマンドは、人間が読める部分だけを表示するために使用できます。
最も単純な形式では、次のコマンドを実行できます。
文字列yourfilename.odt | もっと
前と同じように、テキストの壁が表示されますが、人間として読むことができるテキストのみが表示されます。 運がよければ、あなたのテキストを見ることができます。
しかし、あなたが目にすることが鍵となるものは、最初の行にあります:
mimetypeapplication / vnd.oasis.opendocument.text
ファイルタイプが2つの理由からLibreOffice Writer ODTファイルであることがわかっています。
- 私たちはファイルを作成しました
- 拡張子は.ODTです。
ファイルを作成していない、または回復したディスク上にファイルがあり、そのファイルに拡張子がないとします。
Windowsの回復は、0001、0002、0003などの名前のファイルを回復することがよくあります。ファイルが回復されたという事実は素晴らしいですが、それらのファイルの種類が悪夢であったことを解決しようとしています。
文字列を使用することにより、ファイルタイプを調べるチャンスが得られます。 ファイルがopendocument.textファイルであることを知っていると、ODT拡張子で保存してLibreOfficeライターで開くことができます。
ODTファイルは基本的には圧縮ファイルです。 yourfilename.odtの名前をyourfilename.zipに変更すると、アーカイブツールでそのファイルを開き、ファイルを解凍することもできます。
代替行動
デフォルトでは、stringsコマンドはファイル内のすべての文字列を返しますが、ファイル内の初期化されロードされたデータセクションから文字列を返すように動作を切り替えることができます。
これはどういう意味ですか? 誰も知りません。
文字列を使用してファイルタイプを調べたり、ファイル内の特定のテキストを検索したりすることを想定しています。
文字列コマンドをデフォルトの動作を使用して実行しているときに、期待している出力が得られない場合は、次のコマンドのいずれかを実行して違いがあるかどうかを確認してください。
文字列-d yourfilename
文字列 - データファイル名
マニュアルページには、上記のコマンドが文字列から返されるゴミの量を減らすのに役立つことが記載されています。
"strings"コマンドは逆に動作するように設定することができ、マイナススイッチがデフォルトの動作になります。 これがシステムの場合は、次のコマンドを使用してすべてのデータを返すことができます。
文字列-a yourfilename
フォーマット出力
出力内のテキストを取得して、各テキスト行とともにファイルの名前を表示することができます。
これを行うには、次のいずれかのコマンドを実行します。
文字列-f yourfilename
文字列--print-file-name yourfilename
出力は次のようになります。
yourfilename:テキストの一部
yourfilename:別のテキスト部分
出力の一部として、そのテキストがファイル内に表示される場所のオフセットを表示することもできます。 これを行うには、次のコマンドを実行します。
文字列-o yourfilename
出力は次のようになります。
16573あなた
17024テキスト
オフセットは実際にはシステム上でどのようにコンパイルされたかに応じて、16進数オフセットまたは10進数オフセットになることがありますが、実際には8進数のオフセットです。
必要なオフセットを取得するより正確な方法は、次のコマンドを使用することです。
文字列-td yourfilename
あなたのファイル名への文字列
文字列 - 番目のファイル名
マイナスtはオフセットを返し、次の文字はオフセットタイプを決定します。 (すなわち、d = 10進数、o = 8進数、h = 16進数)。
デフォルトでは、stringsコマンドは新しい文字列を新しい行に出力しますが、選択した区切り文字を設定することができます。 たとえば、パイプ記号( "|")を区切り記号として使用するには、次のコマンドを実行します。
文字列-s "|" あなたのファイル名
文字列制限を調整する
stringsコマンドは、デフォルトで行内に4文字の文字列を探します。 印刷可能な8文字または印刷可能な12文字の文字列を返すように、デフォルトを調整できます。
この制限を調整することで、最良の結果を得るために出力を調整できます。 長すぎる文字列を探すと、有用なテキストは省略される危険がありますが、短すぎると返されるジャンクがさらに多くなる可能性があります。
文字列の制限を調整するには、次のコマンドを実行します。
文字列-n 8 yourfilename
上記の例では、制限を8に変更しました。
8をあなたの選択した番号に置き換えることができます。
次のコマンドを使って同じことをすることもできます:
文字列--bytes = 8 yourfilename
空白を含める
デフォルトでは、stringsコマンドには、タブやスペースなどの空白が印刷可能な文字として含まれています。 したがって、「猫がマットに座っている」という文字列があれば、stringsコマンドはテキスト全体を返します。
改行文字とキャリッジリターンは、デフォルトでは印刷可能文字と見なされません。
新しい行の文字と改行を印字可能な文字として認識させるには、次のように文字列を実行します。
文字列-w yourfilename
エンコーディングを変更する
文字列で使用できるエンコードオプションは5つあります。
- s = 7ビットバイト(ASCII、ISO 8859で使用)
- S = 8ビットバイト
- b = 16ビットビエンディアン
- l = 16ビットリトルエンディアン
デフォルトは7ビットです。
エンコーディングを変更するには、次のコマンドを実行します。
文字列 - あなたのファイル名
文字列--encoding = sあなたのファイル名
上記のコマンドでは、7ビットのバイトを意味するデフォルトの "s"を指定しました。 単に "s"をあなたが選んだエンコーディングレターに置き換えてください。
バイナリファイルの説明名を変更する
文字列の動作を変更して、システムで提供されている以外のバイナリファイル記述子ライブラリを使用することができます。
このスイッチは専門家にとってのスイッチです。 使用する別のライブラリがある場合は、次のstringsコマンドを実行して実行できます。
文字列-T bfdname
ファイルからオプションを読む
毎回同じオプションを使用する場合は、コマンドを実行するたびにすべてのスイッチを指定する必要はありません。時間がかかるためです。
あなたができることは、nanoを使ってテキストファイルを作成し、そのファイル内のオプションを指定することです。
端末内でこれを試すには、次のコマンドを実行します。
ナノ文字列
ファイルに次のテキストを入力します。
-f -o -n 3 -s "|"
CTRLとOを押してファイルを保存し、CTRLとXを押して終了します。
これらのオプションを指定してstringsコマンドを実行するには、次のコマンドを実行します。
文字列@stringsopts yourfilename
オプションはファイルstringsoptsから読み込まれ、各文字列の前にファイル名が表示され、オフセットと "|" セパレータとして。
ヘルプの利用
文字列の詳細については、次のコマンドを実行してヘルプを参照してください。
文字列--help
あるいは、マニュアルページも読むことができます:
人間の弦
実行している文字列のバージョンを確認する
実行している文字列のバージョンを確認するには、次のいずれかのコマンドを実行します。
文字列-v
文字列-V
文字列--version