viewとvi(vim)を利用したHEX dumpの表示と修正方法

1.概要

運用しているシステムがエラーで停止した。普通はエラー発生時のテキストデータを表示しているので、原因の特定は比較的簡単にできます。しかし、見えない文字が存在してエラーになる場合もあります。そんな場合に対処する方法がHEX表示です。

システムを運用していると想定していないデータが入力されてエラーが発生することがあります。テキスト形式のデータは目視確認することができるので、入力データはテキスト形式を多用します。しかし、テキストデータを目視しても見えない文字の影響でエラーとなる場合があります。改行コードがその例です。

目視できない文字を確認するためにはHEX表示を利用します。viやviewを利用して、HEX dump表示や修正を実施できます。viでHEX修正を実施することは滅多にありませんが、viewで内容を読みたいときはあります。操作方法は同じなのでviewを利用して表示する方法を記述します。

2.詳細

試験用のテキストファイルを作成して、viewで表示後、HEX表示モードへ変更します。更に、HEX表示モードを解除して元の表示に戻します。

(1) テスト用のファイルを作成します

$ echo "0123456789" > test.txt
viewで参照します。
$ view test.txt

[表示内容]
0123456789

(2) HEXモードに変更します

ESC
:%!xxd

W10: 警告: 読込専用ファイルを変更します
とメッセージが表示され、HEX表示に変わります。

[表示内容]
00000000: 3031 3233 3435 3637 3839 0a              0123456789.

(3) HEXモードを解除します

ESC
:%!xxd -r

表示が戻ります。

[表示内容]
0123456789

3.所見

データの確認にはHEX表示のバイナリエディタが必要になる場合があります。特に読めない文字(^M等の改行コード)が影響して、処理が思わぬ結果となる場合には必須です。viewで利用するとデータを壊す心配もなく便利です。

私は、必ずviewでデータチェックを最初に実施します。変更が必要な場合に、vi(vim)を利用して修正をします。viewとvi(vim)の操作手順は同じなので失敗することもありません。

他にもコマンドでHEX表示をすることは可能ですが、実際の運用ではデータを修正する必要があるケースがあります。1つのデータで発生した問題の場合、HEXモードで修正することを考えるとvimを利用する方法を理解しておくことは役に立つことだと思います。

4.追加

私は汎用機の利用からコンピュータの業界に入ったので、EBCDICコードから利用を始めました。当時は現在のPCのように独立して稼働する機器としては存在せず、汎用機にオンラインで接続された入力装置でした。

PCが広く利用されるようになり、asciiコードを見る機会が増加しました。コンピュータの世界でも内部機械コードに差異があり、表示上の同じ文字が内部的には異なっています。また、同じPC環境であってもWindowsとLinuxでは改行コードなどに差異があり、同じではありません。

機器がネットワーク接続されるようになり、コードは様々な場所で変換されて利用されます。予期せぬコードの変換や変換漏れなどでデータが想定外の形になることはおきてしまいます。その時に、HEXコードを参照して、内部コードを調べることで起きている問題の解析をすることができます。いつの時代になってもHEXコードの確認は必要なものと思っています。

参考

[本ブログ内参照]
ubuntu/LinuxMintでcronを利用したshutdown処理
[外部サイト参照]
viでバイナリ編集メモ

コメント