hdとodを相互に置き換えることはできますか?


回答:


19

hd同義語でhexdump -CのFreeBSDといくつかのLinuxディストリビューション。hexdumpであるBSD日黎明odからです。のみれるPOSIXによって標準化されましたシングルUNIXの根拠について議論を理由に優先して選択されましたか。ododhdxd

これらのコマンドは非常によく似ています。8進、10進、または16進表記を使用して、バイナリファイルのテキスト表現を表示します。2つの間に基本的な違いはありません。

出力形式を制御するための多くのオプションがあり、一部の形式はどちらか一方のコマンドでのみ達成できます。特に、バイナリファイルの内容を一目で確認するには、hdの出力形式が好きです。右側の列には、印刷可能な文字が文字通り表示されています。odそれはできません。

$ od /bin/sh | head -n 2                # od default: octal, 2-byte words
0000000 042577 043114 000402 000001 000000 000000 000000 000000
0000020 000002 000076 000001 000000 170020 000101 000000 000000

$ od -Ax -t x1 /bin/sh | head -n 2      # od showing bytes in hexadecimal
000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
000010 02 00 3e 00 01 00 00 00 10 f0 41 00 00 00 00 00

$ hd /bin/sh | head -n 2                # hd default output: nice
00000000  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 3e 00 01 00 00 00  10 f0 41 00 00 00 00 00  |..>.......A.....|

ありがとう!odによる8進数出力では、数字は3ビットを意味しますか?たとえば042577、18ビット、つまり9/4バイトですか?
Tim

@Timはい、8進数は、各桁が3 ビット(および16進数、4ビット)に対応することを意味します。042577は実際には16ビット(2バイト)を表します。この形式のブロックの最初の桁は常に0または1になります。octal(042577)= hexadecimal(7f45)= decimal(32581)。
Gilles「SO-邪悪なことをやめよう」

ありがとう!他のソースから、8進数が追加の0で始まると読みました。1で始まるとはどういう意味ですか?
Tim

@Tim多くのプログラミング言語で123は、数値は10進数(10進数)で0123表されますが、数値は8進数(8進数)、つまり012383で表され0x123ます。これは、16進数(16進数)、つまり291です。これはod出力フォーマットとは無関係です。
Gilles「SO-邪悪なことをやめよう」

たくさんの?私はどんなCライクな派生物とも言えます—そうです。ほかに何か?幾つ?
1

5

実際にodは、16進数/ 10進数/ 10進数と印刷可能な文字の両方を表示できます。

$ od -Ax -tx1z /bin/sh | head -n2
000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  >.ELF............<
000010 03 00 3e 00 01 00 00 00 32 4e 00 00 00 00 00 00  >..>.....2N......<

主な違いは、おそらく歴史的なものです。また、一部のバージョンでhdはカラー出力が可能です。


OSX odzサフィックスをサポートしません-tx1z
tripleie

実際のところ、最大の問題は、1つではなく一連の引数を思い出すことhdです。それにもかかわらず、役に立つ、ありがとう:)
poige
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.