このエントリーをはてなブックマークに追加
スポンサーリンク

rabicat

rabicatとは

Linux上にはさまざまな設定ファイルやユーザー管理用のファイルがあります。

しかし、Linuxには拡張子のないファイルも多数存在します。特にetc以下にある設定ファイルは.confとついているものもありますが、拡張子なしの設定ファイルも数多く存在します。/var以下にあるファイルも、テキスト形式のログもあればバイナリ形式のログも存在します。/usr/bin以下にあるファイルは、bin以下であってもシェルスクリプトやPerlスクリプトで書かれたものが入っている場合もあります。

なので、実行形式のファイルや、初期設定ファイルを見ても、それがバイナリなのかテキストなのかすぐにはわかりません。なので、catコマンドで中身を確認するのですが、それでもしバイナリだったりすると画面が化け化けで、最悪の場合telnetを強制終了させないといけなくなります。逆に、バイナリかと思ってhexdump2で見たらテキストだった、なんて事もあります。

そこでstringというコマンドで表示可能な文字だけ抽出して表示させる方法が考えられますが、stringコマンドでは全てがテキストで表示されるため、バイナリが混在しているかわかりませんし、混在していたとしたら、それがどのコードがわかりません。

そこで、ファイルがテキストかバイナリかわからないファイルを表示させる、rabicatコマンドを作成しました。

簡単に言うと、catとhexdump2の中間のようなソフトです。表示可能な文字はそのまま表示し、表示不能な文字は16進数で表示させる事によって、テキストかバイナリかわからないファイルの中身を安心して確認することができます。

作成方法

まず、下記リンクをクリックして、ソース一式をダウンロードします。
rabicat-1.02.tar.gzをダウンロード
これを、適当なコンパイル用のディレクトリにアップします。

tar xvzf rabicat-1.02.tar.gz
cd rabicat-1.02
make
sudo make install

コンパイルが通れば、実行ファイルが/usr/local/binにコピーされます。外部ライブラリは使ってないので、configureスクリプトは入ってません。お使いの環境でコンパイルが通らない場合は、Makefileを書き換えてみてください。

このサイトで使っているサーバー(CentOS4.5)では正常にコンパイルする事ができましたが、全てのLinuxでコンパイルできるとは限りません。Linuxのディストリビューションによってはエラーが出てしまう事も考えられますが、その際は申し訳ありませんが、エラーの内容をチェックしてソースやMakefileの修正をお願いします。

使い方

ソースが正しくコンパイルされていれば、実行ファイルrabicatというファイルが作られていると思います。このファイルを実行します。
書式
rabicat [ファイル名] [オプション] [--help]
ファイル名を指定しなかった時は、標準入力から読み込みます。|でパイプ処理で読ませたり、<のリダイレクトで読ませたりする際は、ファイル名を無指定にすると便利です。
オプション
-o ファイル名
出力ファイル名を指定します。指定しなかった時は、標準出力になります。出力を画面で見て確認する時や、さらにパイプさせる時や、>でリダイレクトする時は、出力ファイル名を無指定にすると便利です。 逆にスクリプト内で処理させる時は、-oで出力ファイル名を指定すると良いでしょう。

-width 改行幅
改行幅の最大値を指定します。指定しない時は250になります。出力中のテキストの1行の長さが、改行幅の最大値まで来ると、改行コードがなくても強制改行されます。

-euc
漢字コードをEUCとみなします。特に漢字コードに対する指定をしないと、このオプションが指定された事になります。2バイトコードがEUCコードの範囲内にあればバイナリではなく漢字として出力します。ターミナルソフトの端末設定がEUCになっている必要があります。

-sjis
漢字コードをシフトJISとみなします。2バイトコードがシフトJISコードの範囲内にあればバイナリではなく漢字として出力します。ターミナルソフトの端末設定がシフトJISになっている必要があります。

-nokanji
漢字コード(0x80以上のコード)を全てバイナリとみなします。日本語表示機能のない端末で日本語まじりの文書を表示した時に、少しましに見えます。(といっても読めるレベルではありませんが。)

-notab
タブコードをバイナリとみなします。タブコードは[09]と表示されます。

-nocrlf
改行コードを\r\nと表記します。改行コードがWindows式(\r\n)かMax式(\r)かLinux式(\n)かを確かめる時に役に立ちます。

-escape
エスケープコードをそのまま出力します。この指定をすると、JISコード(ISO-2022-JP)で書かれた文書が正しく表示できますが、バイナリファイルを表示させてしまうと、以降の表示が化け化けになるリスクがあります。

--help
ヘルプを表示します

rabicat /etc/mail/access
rabicat /etc/mail/access.db
テキストファイル(access)と、バイナリファイル(access.db)共に文字化けする事なく、ファイルの中身を確認することができます。
rabicat /etc/mail/access.db -o access.db.txt
/etc/mail/access.dbを読み込み、access.db.txtを書き込みます。
rabicat /etc/mail/access.db -width 80
/etc/mail/access.dbを読み込み、1行を80文字で強制改行します。
rabicat < /etc/mail/access.db > access.db.txt
標準入力から/etc/mail/access.dbを読み込み、標準出力からリダイレクトしてaccess.db.txtを書き込みます。

制限事項

1行の最大数は250文字までです。これは、多くのテキストエディタで250文字以上の行を正しく編集できないためです。あくまでも、バイナリまじりのファイルをテキストエディタで表示するものですので、このような仕様になっています。

エスケープをそのまま表示する-escapeオプションをつけた場合、1行250文字付近にエスケープが来た場合は改行コードがエスケープされてしまう場合があります。ただ、このソフトはあくまで安全に中身を確認する事が目的ですので、JISコードまじりの文書だと確認したら、NKF等をパイプして読んだ方が良いと思います。
スポンサーリンク