ファイルの内容を表示する xxd/hexdump/od の由来
xxd/hexdump/od はいずれもCLからで利用できるシェルユーティリティのひとつであり、ファイルの内容を様々な形式で dump することを主な目的としている。
xxd
xxd は vim (Vi IMproved) に附属するユーティリティのひとつ。OSのパッケージマネージャーでvimをインストールすれば自ずと付いてくるのではないか。
16進数形式のダンプ (hexdump) をバイナリに戻す機能がある。これはほかふたつには無い。
hexdump
名称の由来は、“dump in hexadecimal“ などといったところ? もちろん、実際には16進数のみならず8進数、10進数、ASCII形式でのdumpにも対応する。
いくつかの実装があり、その中でもBSDとLinuxディストリビューションとで様相が異なる。
BSD
主要なBSDであるFreeBSD、OpenBSD、NetBSDにはいずれもhexdumpが標準で収録されている。とりわけ、OpenBSDのman pageによれば、
The
hexdump
utility first appeared in 4.3BSD-Reno.
とあり、共通の祖先から派生していることが伺われる。
さらに、3者の hexdump.c
のソースプログラムを見ても、著作権表記がすべて次のようになっており、これを補強する格好になっている。
* Copyright (c) 1989, 1993
* The Regents of the University of California. All rights reserved.
Linuxディストリビューション
kernel.orgが開発するutil-linuxプロジェクトにhexdumpが含まれている。多くのLinuxディストリビューションではutil-linuxパッケージが初めからインストールされているであろうから、標準でhexdumpが使えよう。
BSDのものと異なり、util-linuxのhexdumpはGNUの長いオプション形式 (--long-option
) にも対応している。
hexdump.c
のソースプログラムを見ると、興味深いことに次の著作権表記を見つけることができる。
* Copyright (c) 1989 The Regents of the University of California.
* All rights reserved.
これはつまり、BSDの項目で記したものと同じ祖先から派生していると見て良さそうだ。
od
名称は octal dump からであろう。この由来とは裏腹に、実際にはhexdumpと同様に10進数、16進数、ASCII形式でのdumpにも対応する。
IEEE Std 1003.1-2008(あるいはPOSIX)で規定されている〝格式高い〟コマンドである。歴史的には
An od command appeared in Version 1 AT&T UNIX.
とあり、たいへんに由緒正しい。
hexdump同様に、いくつかの実装が存在し、その中でもBSDとLinuxディストリビューションとで様相が異なる。
BSD
hexdump同様、主要なBSDであるFreeBSD、OpenBSD、NetBSDにはいずれもodが標準で収録されている。ところで、このodは実際のところhexdumpの別名で、odのソースプログラムは別個に存在しない。先の項目で見たように、Version 1 AT&T UNIXの時には存在していたodは、4.3BSD-Renoあたりでhexdumpとひとまとめにされたのだろうか。よって、BSDのodは受け入れるオプションが異なる程度の違いでしか無いと見てよかろう。
Linuxディストリビューション
GNU coreutilsにodコマンドとして収録されている。こちらはutil-linuxプロジェクトのhexdumpとは独立した実装となっている。GNU coreutilsに取り込むにあたって、一から書き直したのであろう。
hexdump同様、BSDのものと異なり、GNU coreutilsのodはGNUの長いオプション形式 (--long-option) にも対応する。
リンク
xxd
hexdump
od