Чи можуть hd і od замінювати один одного?


Відповіді:


19

hdє синонімом hexdump -Cна FreeBSD і на деяких дистрибутивах Linux. hexdumpє з BSD днів ; odє від світанку часу . Тільки odце стандартизовано POSIX . В обґрунтування Single 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 (восьмерична), тобто 012383. 0x123було б в базі 16 (шістнадцятковим), тобто 291. Це не пов'язаний з odвихідним форматом.
Жил 'ТАК - перестань бути злим'

Багато? Я б сказав, будь-які C-подібні та похідні - так, справді. Що ще? Як багато?
poige

5

Насправді odможуть відображатись шістнадцяткові / 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можуть виводити кольори.


OSX odне підтримує zсуфікс в-tx1z
tripleee

Насправді найбільшою проблемою було б пам’ятати про той потяг арґусів замість одного hd. Тим не менше, корисно, дякую :)
poige
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.