쉘 : 바이너리 파일의 바이트를 읽고 16 진수로 인쇄하는 방법?


답변:


45

사용하다 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

...


6
또한 확인하십시오 od. vi 스타일의 16 진 편집기도 hexer있습니다.
LawrenceC

8
"hexdump -C 파일"의 출력이 더 좋습니다. xxd도 훌륭한 도구입니다.
Kambus

bash hexa 형식으로 표시hexdump -e '"\\\x" /1 "%02x"' filename
Aquarius Power

정보의 경우, 첫 번째 열은 바이트의 16 진 오프셋이고 나머지 행은 8 바이트의 2 바이트 디스플레이 (즉, 16 바이트)이므로 두 번째 행 10은 16의 16 인 오프셋으로 시작합니다 . 2 바이트 표현은 시스템 의 엔디안 에 따라 다릅니다 . man hexdump자세한 내용을 입력 하십시오.
miguelmorin

26

또 다른 옵션은 od입니다 .

od -t x1 FILE

또는

od -x FILE

od 미세 조정을위한 많은 옵션이 있습니다.


9
대부분의 사람들은 od -t x1내가 좋아하는 형식으로 찾을 것 입니다.
alex

od -t test내가 얻은 줄od: invalid character 't' in type string 'test'
Tom Brito

그것은 일했다--t
Tom Brito

@ Tom : 어쩌면 다른 유닉스 / 리눅스 풍미일까요? 내 od는 :od --version od (GNU coreutils) 7.4
사용자가 알 수 없음

12

우리가 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

3
다른 것과 달리 xxd는 수정 사항을 되돌릴 수도 있습니다. 이를 통해 쉘을 사용하여 이진 파일을 변경할 수 있습니다.
Offirmo

2
귀하의 while루프 백 슬래시와 (공백 문자)의 경우 ksh93에 반대하고 떠들썩한 파티에 (로) 줄 바꿈 문자 작동하지 않으며, 8 비트 세트 바이트 UTF8 로케일에서 제대로 작동합니다. 또한,이 "OD"필요가 없습니다, 당신은 사용할 수 있습니다printf '%02x\n' "'$byte"
스테판 Chazelas가

참고 : offset여기서는 일종의 "더미 변수"입니다. 실용적이지 않습니다. 단지 자리 표시 자로 사용됩니다 hex. 이것은 때때로 read변수가 파란색에서 나오는 부정적인 결과로 가독성에 영향을 미칩니다 .
syntaxerror

혹시. 그러나이 경우 범위 $offset는 서브 쉘에 의해 제한되므로 문제로 보지 않습니다.
Mikel

4

내 두 센트 :

tail -f streamfile | hexdump -C

나는 당신이 hexdump 라이브를 볼 수있는 동안 현재 버퍼링 파일을 마무리하고 있기 때문에 이것을 좋아합니다. 유닉스의 모든 것은 파일이며, 우리는 다양한 문제 tail와 같은 명령을 쉽게 연결 hexdump하고 해결할 수 있다는 것을 잊지 마십시오 .


for((i=0;i<100;i++));do echo $i >>tst2.bin;sleep 1;done&그것으로 테스트 thx를 모니터링하기 위해 잘 작동합니다 :)
Aquarius Power

3
mc 

자정 사령관은 또 다른 옵션입니다. 모든 유닉스 맛에 사용할 수 있는지 모르겠습니다. 먼저 다운로드해야 할 수도 있습니다.
F3 F4내부 편집기 / 16 진 모드로 볼 수 있습니다.


0

바이너리 파일 내에서 텍스트를 검색해야 할 때 od를 c와 x1과 함께 사용합니다.

$ echo "Some text..." | od -t c -t x1
0000000   S   o   m   e       t   e   x   t   .   .   .  \n
         53  6f  6d  65  20  74  65  78  74  2e  2e  2e  0a
0000015
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.