Эти команды делают очень похожие вещи: отображают текстовое представление двоичного файла, используя восьмеричные, десятичные или шестнадцатеричные обозначения. Там нет принципиальной разницы между ними.
У них есть много опций для управления форматом вывода, и некоторые форматы могут быть достигнуты только с помощью одной или другой команды. В частности, чтобы увидеть, что находится в двоичном файле, мне нравится 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, так и печатные символы:
xxd
тоже! : DОтветы:
hd
является синонимомhexdump -C
на FreeBSD и на некоторых дистрибутивах Linux.hexdump
от дней BSD ;od
это с незапамятных времен . Толькоod
это стандартизованный POSIX . В едином обосновании UNIX обсуждается, почемуod
был выбран предпочтениеhd
илиxd
.Эти команды делают очень похожие вещи: отображают текстовое представление двоичного файла, используя восьмеричные, десятичные или шестнадцатеричные обозначения. Там нет принципиальной разницы между ними.
У них есть много опций для управления форматом вывода, и некоторые форматы могут быть достигнуты только с помощью одной или другой команды. В частности, чтобы увидеть, что находится в двоичном файле, мне нравится
hd
формат вывода с колонкой справа, показывающей буквально печатные символы;od
не могу этого сделать.источник
042577
, 18 бит, т.е. 9/4 байта?123
это число, представленное в базовой 10 (десятичной), тогда как0123
означает, что число представлено в базовой 8 (восьмеричной), то0123
есть 83.0x123
будет в базовой 16 (шестнадцатеричной), то есть 291. Это не имеет отношения кod
выходному формату.На самом деле
od
может отображать как hex / oct / dec, так и печатные символы:Основное отличие, я думаю, только историческое. Также некоторые версии
hd
могут выводить цвета.источник
od
не поддерживаетz
суффикс в-tx1z
hd
. Тем не менее, полезно, спасибо :)