連載
» 2018年11月01日 05時00分 公開

Linux基本コマンドTips(254):【 xxd 】コマンド――ファイルを16進数でダンプする、ダンプから復元する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ファイルを16進数でダンプし、ダンプから復元する「xxd」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ファイルを16進数でダンプし、ダンプから復元する「xxd」コマンドです。

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 [オプション] [ファイル名]

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進ダンプを出力するファイルの位置(オフセット)を指定する


ファイルを16進数で出力する

 「xxd ファイル名」で、指定したファイルを16進数でダンプします(画面1)。各行の左端にファイル内の位置(オフセット)を16進数で表示し、16バイト分の16進数を表示した後、右端にダンプ内容をASCIIコードで表示します。ASCIIコードで表示できない文字は「.」で表します。

 ファイルを2つ指定すると、2つ目はダンプの「保存先」として扱われることになるので注意してください。この場合、既存ファイルがあっても上書きします。

 画面1では、headコマンドでファイルの冒頭部分だけを表示しています。テキストファイルをダンプすると画面2のようになります。

コマンド実行例

xxd ファイル名

(ファイルを16進数でダンプする)


画面1 画面1 バイナリファイルを16進数でダンプしたところ
画面2 画面2 テキストファイルを16進数でダンプしたところ


ファイルを2進数で出力する

 「xxd -b ファイル名」で、指定したファイルを2進数でダンプします(画面3)。各行の左端にファイル内の位置(オフセット)を16進数で表示し、6バイト分の16進数を2進数でダンプした後、右端にASCIIコードによる表示が続きます。

コマンド実行例

xxd -b ファイル名

(ファイルを2進数でダンプする)


画面3 画面3 バイナリファイルとテキストファイルを2進数でダンプしたところ


標準入力から受け取って出力する

 ファイル名を指定せずに実行した場合、標準入力から受け取った内容をダンプします(画面4)。

 アルファベットのASCIIコードを調べたいような場合は、echoコマンドを使うと手軽かもしれません。echoコマンドの出力の末尾には改行コード(「0a」)が入ります。これを避けたい場合は、echoコマンドの-nオプションを使用します。

コマンド実行例

echo 文字列 | xxd

(文字列を16進数でダンプする)

echo -n 文字列 | xxd

(末尾に改行がない文字列を16進数でダンプする)

echo -n 文字列 | xxd -b

(末尾に改行がない文字列を2進数でダンプする)


画面4 画面4 標準入力を使って文字列をダンプしたところ


16進数のダンプを元に戻す

 「xxd」を使って16進数のダンプとして出力した内容を「xxd -r」で元のファイルに復元できます。

 画面5では、動作内容を分かりやすくするため、xxdでテキストファイルを指定してファイルに出力し、書き換えてから、「xxd -r」で復元しています。

コマンド実行例

xxd orgfile dumpfile

(orgfileをダンプしてdumpfileに保存する。リダイレクトで「xxd orgfile > dumpfile」としてもよい)

xxd -r dumpfile newfile

(dumpfileを復元してnewfileに保存する)


画面5 画面5 16進ダンプを編集後、ファイルに復元したところ


筆者紹介

西村 めぐみ(にしむら めぐみ)

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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。