Hd và od có thể thay thế cho nhau?


11

hdodcả hai người xem đổ nội dung nhị phân. Có thể hdđược sử dụng bất cứ nơi nào odvà ngược lại?


4
... và đừng quên xxdquá! : D
Aaron D. Marasco

Câu trả lời:


19

hdlà một từ đồng nghĩa với hexdump -Ctrên FreeBSD và trên một số bản phân phối Linux. hexdumplà từ những ngày BSD ; odlà từ bình minh của thời gian . Chỉ odđược chuẩn hóa bởi POSIX . Cơ sở lý luận UNIX đơn thảo luận về lý do tại sao odđược chọn theo sở thích hdhoặc xd.

Các lệnh này thực hiện những điều rất giống nhau: hiển thị biểu diễn văn bản của tệp nhị phân, sử dụng ký hiệu bát phân, thập phân hoặc thập lục phân. Không có sự khác biệt cơ bản giữa hai.

Chúng có nhiều tùy chọn để kiểm soát định dạng đầu ra và một số định dạng chỉ có thể đạt được bằng một hoặc một lệnh khác. Cụ thể, để xem lướt qua những gì trong tệp nhị phân, tôi thích hdđịnh dạng đầu ra, với một cột bên phải hiển thị các ký tự có thể in theo nghĩa đen; odkhông thể làm điều đó

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

Cảm ơn! Trong đầu ra bát phân của od, một chữ số có nghĩa là ba bit? Vậy ví dụ 042577là 18 bit tức là 9/4 byte?
Tim

@Tim Có, bát phân có nghĩa là mỗi chữ số tương ứng với 3 bit (và thập lục phân , 4 bit). 042577 thực sự đại diện cho 16 bit (2 byte); chữ số đầu tiên trong một khối ở định dạng này sẽ luôn là 0 hoặc 1. bát phân (042577) = thập lục phân (7f45) = thập phân (32581).
Gilles 'SO- ngừng trở nên xấu xa'

Cảm ơn! Tôi đọc từ các nguồn khác rằng các số bát phân bắt đầu bằng một số 0. Nó có nghĩa gì khi bắt đầu bằng 1?
Tim

@Tim Trong nhiều ngôn ngữ lập trình, 123là một số được biểu thị trong cơ sở 10 (thập phân), trong khi đó 0123có nghĩa là số đó được biểu thị trong cơ sở 8 (bát phân), tức 0123là 83. 0x123sẽ ở cơ sở 16 (thập lục phân), tức là 291. Đây là không liên quan đến odđịnh dạng đầu ra.
Gilles 'SO- đừng trở nên xấu xa'

Nhiều? Tôi muốn nói bất kỳ giống như C và dẫn xuất - thực sự. Còn gì nữa không Bao nhiêu?
poige

5

Trên thực tế odcó thể hiển thị cả ký tự hex / oct / dec và có thể in:

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

Sự khác biệt chính, tôi đoán, chỉ là lịch sử. Ngoài ra một số phiên bản hdcó thể màu đầu ra.


OSX odkhông hỗ trợ zhậu tố trong-tx1z
tripleee

Trên thực tế, rắc rối lớn nhất là phải nhớ rằng đoàn tàu tranh luận thay vì một hd. Tuy nhiên, hữu ích, cảm ơn bạn :)
poige
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.