Могут ли hd и od заменить друг друга?

11

hdи odоба являются программами просмотра дампа бинарного контента. Можно hdиспользовать везде, где odесть и наоборот?

Тим
источник
4
... и не забудь xxdтоже! : D
Аарон Д. Мараско

Ответы:

19

hdявляется синонимом hexdump -Cна FreeBSD и на некоторых дистрибутивах Linux. hexdumpот дней BSD ; odэто с незапамятных времен . Только odэто стандартизованный POSIX . В едином обосновании UNIX обсуждается, почему odбыл выбран предпочтение hdили xd.

Эти команды делают очень похожие вещи: отображают текстовое представление двоичного файла, используя восьмеричные, десятичные или шестнадцатеричные обозначения. Там нет принципиальной разницы между ними.

У них есть много опций для управления форматом вывода, и некоторые форматы могут быть достигнуты только с помощью одной или другой команды. В частности, чтобы увидеть, что находится в двоичном файле, мне нравится 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 означает ли цифра три бита? Так, например 042577, 18 бит, т.е. 9/4 байта?
Тим
@Tim Да, восьмеричное означает, что каждая цифра соответствует 3 битамшестнадцатеричная , 4 бита). 042577 фактически представляет 16 бит (2 байта); первая цифра в блоке в этом формате всегда будет 0 или 1. восьмеричное (042577) = шестнадцатеричное (7f45) = десятичное (32581).
Жиль "ТАК - перестань быть злым"
Спасибо! Я читал из других источников, что восьмеричные числа начинаются с дополнительного 0. Что это означает, когда оно начинается с 1?
Тим
@Tim Во многих языках программирования 123это число, представленное в базовой 10 (десятичной), тогда как 0123означает, что число представлено в базовой 8 (восьмеричной), то 0123есть 83. 0x123будет в базовой 16 (шестнадцатеричной), то есть 291. Это не имеет отношения к odвыходному формату.
Жиль "ТАК - перестань быть злым"
Много? Я бы сказал, что все C-подобные и производные - да, действительно. Что еще? Сколько?
Пой
5

На самом деле odможет отображать как hex / oct / dec, так и печатные символы:

$ 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могут выводить цвета.

hurufu
источник
OSX odне поддерживает zсуффикс в-tx1z
tripleee
На самом деле самой большой проблемой было бы вспомнить этот набор аргументов вместо одного hd. Тем не менее, полезно, спасибо :)
poige