Shell:바이너리 파일의 바이트를 읽고 16진수로 인쇄하는 방법은 무엇입니까?

Shell:바이너리 파일의 바이트를 읽고 16진수로 인쇄하는 방법은 무엇입니까?

셸에서 바이너리 파일의 바이트를 읽고 출력을 16진수로 인쇄하려면 어떻게 해야 합니까?

답변1

사용hexdump(1)

$ hexdump -x /usr/bin/hexdump 
0000000    feca    beba    0000    0300    0001    0700    0080    0300
0000010    0000    0010    0000    5080    0000    0c00    0000    0700
0000020    0000    0300    0000    00a0    0000    b06f    0000    0c00
0000030    0000    1200    0000    0a00    0100    0010    0000    107c
0000040    0000    0c00    0000    0000    0000    0000    0000    0000
0000050    0000    0000    0000    0000    0000    0000    0000    0000

...

답변2

또 다른 옵션은OD:

od -t x1 FILE

예제 출력:

$ printf '0123456789abcdef0123456789abcdef\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f' | od -t x1
0000000 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66
*
0000040 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
0000060

또는

od -x FILE

예제 출력:

0000000 3130 3332 3534 3736 3938 6261 6463 6665
*
0000040 0100 0302 0504 0706 0908 0b0a 0d0c 0f0e
0000060

od미세 조정 옵션이 많이 있습니다.

답변3

od및 를 사용할 때 hexdump두 가지 유사한 도구가 있습니다.

  • HD(bsdmainutils에서)
  • xxd (Vim의 일부)

예제 출력:

$ hd /usr/bin/od | head
00000000  7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 03 00 01 00 00 00  20 8e 04 08 34 00 00 00  |........ ...4...|
00000020  a4 a2 00 00 00 00 00 00  34 00 20 00 08 00 28 00  |........4. ...(.|
00000030  1b 00 1a 00 06 00 00 00  34 00 00 00 34 80 04 08  |........4...4...|
00000040  34 80 04 08 00 01 00 00  00 01 00 00 05 00 00 00  |4...............|
00000050  04 00 00 00 03 00 00 00  34 01 00 00 34 81 04 08  |........4...4...|
00000060  34 81 04 08 13 00 00 00  13 00 00 00 04 00 00 00  |4...............|
00000070  01 00 00 00 01 00 00 00  00 00 00 00 00 80 04 08  |................|
00000080  00 80 04 08 c4 9d 00 00  c4 9d 00 00 05 00 00 00  |................|
00000090  00 10 00 00 01 00 00 00  00 a0 00 00 00 20 05 08  |............. ..|

$ xxd /usr/bin/od | head
0000000: 7f45 4c46 0101 0100 0000 0000 0000 0000  .ELF............
0000010: 0200 0300 0100 0000 208e 0408 3400 0000  ........ ...4...
0000020: a4a2 0000 0000 0000 3400 2000 0800 2800  ........4. ...(.
0000030: 1b00 1a00 0600 0000 3400 0000 3480 0408  ........4...4...
0000040: 3480 0408 0001 0000 0001 0000 0500 0000  4...............
0000050: 0400 0000 0300 0000 3401 0000 3481 0408  ........4...4...
0000060: 3481 0408 1300 0000 1300 0000 0400 0000  4...............
0000070: 0100 0000 0100 0000 0000 0000 0080 0408  ................
0000080: 0080 0408 c49d 0000 c49d 0000 0500 0000  ................
0000090: 0010 0000 0100 0000 00a0 0000 0020 0508  ............. ..

또는 한 번에 한 바이트씩 읽고 원하는 형식으로 인쇄하려면 다음을 시도하십시오.

while read -n 1 byte; do
    ord=$(printf "%b" "${byte:-\000}" |
          od -t x1 |
          { read offset hex; echo $hex; })
    echo "$ord"
done </usr/bin/od

예제 출력:

7f
45
4c
46
01
01
01
00
00
00

답변4

mc 

Midnight Commander는 또 다른 옵션입니다. 모든 UNIX 버전에서 작동하는지 모르겠습니다. 먼저 다운로드해야 할 수도 있습니다.
F3 F4내부 편집기/16진수 모드에서 봅니다.

관련 정보