Bisakah hd dan od saling menggantikan?

11

hddan odkeduanya membuang pemirsa konten biner. Apakah hdbisa digunakan di mana saja oddan sebaliknya?

Tim
sumber
4
... dan jangan lupa xxdjuga! : D
Aaron D. Marasco

Jawaban:

19

hdadalah sinonim untuk hexdump -Cdi FreeBSD dan pada beberapa distribusi Linux. hexdumpberasal dari hari - hari BSD ; odadalah dari waktu fajar . Hanya odyang distandarisasi oleh POSIX . Alasan Tunggal UNIX membahas mengapa oddipilih berdasarkan preferensi hdatau xd.

Perintah-perintah ini melakukan hal yang sangat mirip: menampilkan representasi tekstual dari file biner, menggunakan notasi oktal, desimal atau heksadesimal. Tidak ada perbedaan mendasar antara keduanya.

Mereka memiliki banyak opsi untuk mengontrol format output, dan beberapa format hanya dapat dicapai dengan satu atau beberapa perintah lainnya. Secara khusus, untuk melihat sekilas apa yang ada dalam file biner, saya suka hdformat output, dengan kolom di sebelah kanan menunjukkan karakter yang dapat dicetak secara harfiah; odtidak bisa melakukan itu.

$ 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.....|
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Terima kasih! Dalam output oktal oleh od, apakah satu digit berarti tiga bit? Jadi misalnya 04257718 bit yaitu 9/4 byte?
Tim
@Tim Ya, oktal berarti setiap digit berhubungan dengan 3 bit (dan heksadesimal , 4 bit). 042577 sebenarnya mewakili 16 bit (2 byte); digit pertama dalam sebuah blok dalam format ini akan selalu 0 atau 1. oktal (042577) = heksadesimal (7f45) = desimal (32581).
Gilles 'SO- stop being evil'
Terima kasih! Saya membaca dari sumber lain bahwa angka oktal dimulai dengan angka 0. Apa artinya ketika angka 1 dimulai?
Tim
@Tim Dalam banyak bahasa pemrograman, 123adalah angka yang diwakili dalam basis 10 (desimal), sedangkan 0123artinya angka tersebut diwakili dalam basis 8 (oktal), yaitu 012383. 0x123akan berada di basis 16 (heksadesimal), yaitu 291. Ini adalah tidak terkait dengan odformat output.
Gilles 'SANGAT berhenti menjadi jahat'
Banyak? Saya akan mengatakan C-suka dan turunannya - ya, memang. Apa lagi? Berapa banyak?
poige
5

Sebenarnya oddapat menampilkan karakter hex / oct / dec dan printable:

$ 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......<

Perbedaan utama, saya kira, hanya historis. Juga beberapa versi hddapat mewarnai keluaran.

hurufu
sumber
OSX odtidak mendukung zsufiks in-tx1z
tripleee
Sebenarnya masalah terbesar adalah mengingat bahwa kereta args bukan satu hd. Meskipun demikian, bermanfaat, terima kasih :)
poige