19.5.2.1 ASCIIファイルの中身

ターミナルウィンドウ でコマンド hexdump を利用して, テキストデータがどのように符号化されているかを見てみましょう.

まず,次のコマンドを実行して,ファイル filenameを作ります.

promptcat > filename return2 1st Line. return2 2nd Line? return2 control d

2行目と3行目は, ファイルの内容となる部分ですので, 自由に打って構いません. 最後の control d はコントロールキーと「d」のキーを同時に押すことを意味しています. この場合には, 次のように 20 バイトのファイル filename が作られました.

promptls -l filename return2 -rw------- 1 yama teacher 20 Apr 11 18:55 filename promptcat filename return2 1st Line. 2nd Line?

単純に文字数だけを数えると, どちらの行も(空白文字を含めて)9文字ずつであり, 全部で18文字のように思われます. ここで, hexdump コマンドを用いることで次のようにテキストデータの符号化方法を調べられます.

prompthexdump -cb filename return2 0000000 1 s t L i n e . \n 2 n d L i 0000000 061 163 164 040 114 151 156 145 056 012 062 156 144 040 114 151 0000010 n e ? \n 0000010 156 145 077 012 0000014

1行目と3行目はファイルfilename の内容を文字として, 2行目と4行目はバイトの8進数表現として,それぞれ表示しています. 前ページにある ASCII の符号表と見比べてみましょう. この結果から, 1文字が1バイトに対応し, 全部で 20 文字あり, 行末に "\n" (012(8)) という特殊な文字があることが分かります. これは UNIX において改行 (new line) を意味する制御文字です.

tips

hexdump コマンドには様々なオプションがあります. promptman hexdump return2 などして調べてみましょう. 上で使った -c (character) オプションは文字を表示する, -b (byte) オプションはバイトを8進数で表示するものです. オプションの付け方はreview_s12.4 オプションを復習してください. オプションを付けずに実行すると、 2バイトずつを16進数で表示します. つまり hexadecimal dump でこれがコマンド名の由来となっています.

hexdump コマンドのほかに, より古くからあるコマンドとして od コマンドがあります. これは8進数で表示するもので, コマンド名は octal dump から来ています. od コマンドの機能は hexdump コマンドで実現されるので, od コマンドを覚える必要はないでしょう.