本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ファイルを16進数でダンプし、ダンプから復元する「xxd」コマンドです。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ファイルを16進数でダンプし、ダンプから復元する「xxd」コマンドです。
「xxd」は、ファイルや標準入力から受け取った内容を16進数、または2進数でダンプするコマンドです。さらに16進ダンプから元のデータに復元できます。
「ダンプ(dump)」は記録などの中身をまとめて表示したり、記録したりするという意味です。xxdの場合はバイナリファイルを16進数または2進数で表示します。
ファイルを8進数や16進数でダンプするコマンドには、hexdumpの他に、odコマンド(連載第93回)やhexdumpコマンド(第253回)などがあります。
xxdコマンドはvimパッケージに収録されているコマンドで、バイナリ編集モード時のフィルターとして使います(※1)。
※1 viでは「:%!xxd」でダンプ形式の表示になる。その後16進ダンプ部分を編集し、「:%!xxd -r」で変更を反映する。vim(vi)コマンドの基本操作についてはLinuxの定番テキストエディタ「vi」をマスターしようを参照。
xxd [オプション] [ファイル名]
xxd [オプション] 入力ファイル名 出力ファイル名
※[ ]は省略可能な引数を示しています。
短いオプション | 長いオプション | 意味 |
---|---|---|
-a | -autoskip | 16進数「00」だけからなる行(nul行)を1つの「*」で置き換えて表示する |
-b | -bits | 2進数ダンプで表示する(-r、-p、-iとは一緒に使用できない) |
-c 桁数 | -cols 桁数 | 1行に16進数を何桁分表示するかを指定する(デフォルトは16、最小1、最大256) |
-g バイト数 | -groupsize バイト数 | 何バイトごとに空白を入れるか(デフォルトは2、リトルエンディアンモードの場合は4、2進ダンプの場合は1、空白を入れない場合は0) |
-i | -include | C言語のインクルードファイル形式で表示する |
-E | -EBCDIC | ASCIIではなくEBCDICを使用する(-r、-p、-iとは一緒に使用できない) |
-p | -ps,-postscript,-plain | ポストスクリプト形式の16進ダンプ(プレーン16進ダンプ)で表示する |
-u | 16進数に大文字を使用する(デフォルトは小文字) | |
-l 長さ | -len 長さ | 表示するバイト数を指定する |
-s 開始位置 | 表示を開始する位置を指定する(標準入力を使った場合は「+」「-」を使った指定も可能) | |
-r | -revert | 16進ダンプをバイナリに変換する |
-seek 開始位置 | 「-r」の後に使用し、16進ダンプを出力するファイルの位置(オフセット)を指定する | |
「xxd ファイル名」で、指定したファイルを16進数でダンプします(画面1)。各行の左端にファイル内の位置(オフセット)を16進数で表示し、16バイト分の16進数を表示した後、右端にダンプ内容をASCIIコードで表示します。ASCIIコードで表示できない文字は「.」で表します。
ファイルを2つ指定すると、2つ目はダンプの「保存先」として扱われることになるので注意してください。この場合、既存ファイルがあっても上書きします。
画面1では、headコマンドでファイルの冒頭部分だけを表示しています。テキストファイルをダンプすると画面2のようになります。
xxd ファイル名
(ファイルを16進数でダンプする)
「xxd -b ファイル名」で、指定したファイルを2進数でダンプします(画面3)。各行の左端にファイル内の位置(オフセット)を16進数で表示し、6バイト分の16進数を2進数でダンプした後、右端にASCIIコードによる表示が続きます。
xxd -b ファイル名
(ファイルを2進数でダンプする)
ファイル名を指定せずに実行した場合、標準入力から受け取った内容をダンプします(画面4)。
アルファベットのASCIIコードを調べたいような場合は、echoコマンドを使うと手軽かもしれません。echoコマンドの出力の末尾には改行コード(「0a」)が入ります。これを避けたい場合は、echoコマンドの-nオプションを使用します。
echo 文字列 | xxd
(文字列を16進数でダンプする)
echo -n 文字列 | xxd
(末尾に改行がない文字列を16進数でダンプする)
echo -n 文字列 | xxd -b
(末尾に改行がない文字列を2進数でダンプする)
「xxd」を使って16進数のダンプとして出力した内容を「xxd -r」で元のファイルに復元できます。
画面5では、動作内容を分かりやすくするため、xxdでテキストファイルを指定してファイルに出力し、書き換えてから、「xxd -r」で復元しています。
xxd orgfile dumpfile
(orgfileをダンプしてdumpfileに保存する。リダイレクトで「xxd orgfile > dumpfile」としてもよい)
xxd -r dumpfile newfile
(dumpfileを復元してnewfileに保存する)
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.