Heesung Yang

[명령어] xxd (파일 hex/binary view)

xxd는 파일의 내용을 컴퓨터에 저장된, 있는 그대로의 데이터를 보여주는 명령어다. 이 글에서는 centos 설치 후 생성되는 파일을 예제로 사용했다. (/root/anaconda-ks.cfg)

출력

No option

~$ xxd /root/anaconda-ks.cfg | head
0000000: 2376 6572 7369 6f6e 3d44 4556 454c 0a23  #version=DEVEL.#
0000010: 2053 7973 7465 6d20 6175 7468 6f72 697a   System authoriz
0000020: 6174 696f 6e20 696e 666f 726d 6174 696f  ation informatio
0000030: 6e0a 6175 7468 202d 2d65 6e61 626c 6573  n.auth --enables
0000040: 6861 646f 7720 2d2d 7061 7373 616c 676f  hadow --passalgo
0000050: 3d73 6861 3531 320a 2320 5573 6520 6e65  =sha512.# Use ne
0000060: 7477 6f72 6b20 696e 7374 616c 6c61 7469  twork installati
0000070: 6f6e 0a75 726c 202d 2d75 726c 3d22 6874  on.url --url="ht
0000080: 7470 3a2f 2f6d 6972 726f 722e 6365 6e74  tp://mirror.cent
0000090: 6f73 2e6f 7267 2f63 656e 746f 732f 372f  os.org/centos/7/
  • 한 줄에 16바이트씩 출력된다.
  • 맨 마지막 줄의 데이터를 예로 들어 설명하자면,
    • 0000090 : 파일의 오프셋이다. (위치)
    • 6f73 2e6f 7267 (...생략) : 실제 파일 데이터 (16진수, Hexa decimal)
    • os.org/centos/7/ : 실제 파일 데이터를 ascii code로 표현

비트 출력

-b : 데이터를 0과 1로 출력

~$ xxd -b /root/anaconda-ks.cfg | head 
0000000: 00100011 01110110 01100101 01110010 01110011 01101001  #versi
0000006: 01101111 01101110 00111101 01000100 01000101 01010110  on=DEV
000000c: 01000101 01001100 00001010 00100011 00100000 01010011  EL.# S
0000012: 01111001 01110011 01110100 01100101 01101101 00100000  ystem
0000018: 01100001 01110101 01110100 01101000 01101111 01110010  author
000001e: 01101001 01111010 01100001 01110100 01101001 01101111  izatio
0000024: 01101110 00100000 01101001 01101110 01100110 01101111  n info
000002a: 01110010 01101101 01100001 01110100 01101001 01101111  rmatio
0000030: 01101110 00001010 01100001 01110101 01110100 01101000  n.auth
0000036: 00100000 00101101 00101101 01100101 01101110 01100001   --ena
  • 비트로 출력하면, 한 줄에 더 적은 데이터(6바이트)씩 출력된다.

데이터 열 갯수 지정

-c : columns, 바이트 단위, 기본값 16, 최대 256

# 2 bytes per line
~$ xxd -c 2 /root/anaconda-ks.cfg | head
0000000: 2376  #v
0000002: 6572  er
0000004: 7369  si
0000006: 6f6e  on
0000008: 3d44  =D
000000a: 4556  EV
000000c: 454c  EL
000000e: 0a23  .#
0000010: 2053   S
0000012: 7973  ys
# 2 bytes per line
~$ xxd -c 2 -b /root/anaconda-ks.cfg | head
0000000: 00100011 01110110  #v
0000002: 01100101 01110010  er
0000004: 01110011 01101001  si
0000006: 01101111 01101110  on
0000008: 00111101 01000100  =D
000000a: 01000101 01010110  EV
000000c: 01000101 01001100  EL
000000e: 00001010 00100011  .#
0000010: 00100000 01010011   S
0000012: 01111001 01110011  ys

그룹 크기 지정

  • -g <숫자> : 그룹 크기 지정
~$ xxd -g 1 /root/anaconda-ks.cfg | head
0000000: 23 76 65 72 73 69 6f 6e 3d 44 45 56 45 4c 0a 23  #version=DEVEL.#
0000010: 20 53 79 73 74 65 6d 20 61 75 74 68 6f 72 69 7a   System authoriz
0000020: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
0000030: 6e 0a 61 75 74 68 20 2d 2d 65 6e 61 62 6c 65 73  n.auth --enables
0000040: 68 61 64 6f 77 20 2d 2d 70 61 73 73 61 6c 67 6f  hadow --passalgo
0000050: 3d 73 68 61 35 31 32 0a 23 20 55 73 65 20 6e 65  =sha512.# Use ne
0000060: 74 77 6f 72 6b 20 69 6e 73 74 61 6c 6c 61 74 69  twork installati
0000070: 6f 6e 0a 75 72 6c 20 2d 2d 75 72 6c 3d 22 68 74  on.url --url="ht
0000080: 74 70 3a 2f 2f 6d 69 72 72 6f 72 2e 63 65 6e 74  tp://mirror.cent
0000090: 6f 73 2e 6f 72 67 2f 63 65 6e 74 6f 73 2f 37 2f  os.org/centos/7/
xxd -g 2 /root/anaconda-ks.cfg | head
0000000: 2376 6572 7369 6f6e 3d44 4556 454c 0a23  #version=DEVEL.#
0000010: 2053 7973 7465 6d20 6175 7468 6f72 697a   System authoriz
0000020: 6174 696f 6e20 696e 666f 726d 6174 696f  ation informatio
0000030: 6e0a 6175 7468 202d 2d65 6e61 626c 6573  n.auth --enables
0000040: 6861 646f 7720 2d2d 7061 7373 616c 676f  hadow --passalgo
0000050: 3d73 6861 3531 320a 2320 5573 6520 6e65  =sha512.# Use ne
0000060: 7477 6f72 6b20 696e 7374 616c 6c61 7469  twork installati
0000070: 6f6e 0a75 726c 202d 2d75 726c 3d22 6874  on.url --url="ht
0000080: 7470 3a2f 2f6d 6972 726f 722e 6365 6e74  tp://mirror.cent
0000090: 6f73 2e6f 7267 2f63 656e 746f 732f 372f  os.org/centos/7/
~$ xxd -g 4 /root/anaconda-ks.cfg | head
0000000: 23766572 73696f6e 3d444556 454c0a23  #version=DEVEL.#
0000010: 20537973 74656d20 61757468 6f72697a   System authoriz
0000020: 6174696f 6e20696e 666f726d 6174696f  ation informatio
0000030: 6e0a6175 7468202d 2d656e61 626c6573  n.auth --enables
0000040: 6861646f 77202d2d 70617373 616c676f  hadow --passalgo
0000050: 3d736861 3531320a 23205573 65206e65  =sha512.# Use ne
0000060: 74776f72 6b20696e 7374616c 6c617469  twork installati
0000070: 6f6e0a75 726c202d 2d75726c 3d226874  on.url --url="ht
0000080: 74703a2f 2f6d6972 726f722e 63656e74  tp://mirror.cent
0000090: 6f732e6f 72672f63 656e746f 732f372f  os.org/centos/7/

C 언어 헤더 파일 형식으로 출력

  • -i : 가끔, 파일 내용을 소스코드에 그대로 넣고 싶은 경우 사용한다.
    • html 파일을 C 언어로 작성한 웹 서버 코드에 같이 포함시키고 싶을때 사용해봄
xxd -i /root/anaconda-ks.cfg | head
unsigned char _root_anaconda_ks_cfg[] = {
  0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3d, 0x44, 0x45, 0x56,
  0x45, 0x4c, 0x0a, 0x23, 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20,
  0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
  0x6e, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f,
  0x6e, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x20, 0x2d, 0x2d, 0x65, 0x6e, 0x61,
  0x62, 0x6c, 0x65, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x2d, 0x2d,
  0x70, 0x61, 0x73, 0x73, 0x61, 0x6c, 0x67, 0x6f, 0x3d, 0x73, 0x68, 0x61,
  0x35, 0x31, 0x32, 0x0a, 0x23, 0x20, 0x55, 0x73, 0x65, 0x20, 0x6e, 0x65,
  0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c,
  ...생략
  0x65, 0x72, 0x76, 0x65, 0x2d, 0x6d, 0x62, 0x3d, 0x27, 0x61, 0x75, 0x74,
  0x6f, 0x27, 0x0a, 0x0a, 0x25, 0x65, 0x6e, 0x64, 0x0a
};
unsigned int _root_anaconda_ks_cfg_len = 6921;

특정 길이만큼만 읽기

  • -l <숫자: 바이트단위> : 파일 용량이 너무 크고, 파일 앞부분의 내용만 필요한 경우 유용
xxd -l 132 /root/anaconda-ks.cfg
0000000: 2376 6572 7369 6f6e 3d44 4556 454c 0a23  #version=DEVEL.#
0000010: 2053 7973 7465 6d20 6175 7468 6f72 697a   System authoriz
0000020: 6174 696f 6e20 696e 666f 726d 6174 696f  ation informatio
0000030: 6e0a 6175 7468 202d 2d65 6e61 626c 6573  n.auth --enables
0000040: 6861 646f 7720 2d2d 7061 7373 616c 676f  hadow --passalgo
0000050: 3d73 6861 3531 320a 2320 5573 6520 6e65  =sha512.# Use ne
0000060: 7477 6f72 6b20 696e 7374 616c 6c61 7469  twork installati
0000070: 6f6e 0a75 726c 202d 2d75 726c 3d22 6874  on.url --url="ht
0000080: 7470 3a2f                                tp:/

데이터만 출력

  • -p : 순수 데이터만 출력하고 싶을 때 사용
xxd -p /root/anaconda-ks.cfg | head
2376657273696f6e3d444556454c0a232053797374656d20617574686f72
697a6174696f6e20696e666f726d6174696f6e0a61757468202d2d656e61
626c65736861646f77202d2d70617373616c676f3d7368613531320a2320
557365206e6574776f726b20696e7374616c6c6174696f6e0a75726c202d
2d75726c3d22687474703a2f2f6d6972726f722e63656e746f732e6f7267
2f63656e746f732f372f6f732f7838365f36342f220a7265706f202d2d6e
616d653d226f7322202d2d6261736575726c3d687474703a2f2f6d697272
6f72736e61702e63656e746f732e6f72672f32303139303132372f63656e
746f732f372f6f732f7838365f36342f202d2d636f73743d3130300a7265
706f202d2d6e616d653d227570646174657322202d2d6261736575726c3d

대문자 출력

  • -u : uppercase
xxd -u /root/anaconda-ks.cfg | head
0000000: 2376 6572 7369 6F6E 3D44 4556 454C 0A23  #version=DEVEL.#
0000010: 2053 7973 7465 6D20 6175 7468 6F72 697A   System authoriz
0000020: 6174 696F 6E20 696E 666F 726D 6174 696F  ation informatio
0000030: 6E0A 6175 7468 202D 2D65 6E61 626C 6573  n.auth --enables
0000040: 6861 646F 7720 2D2D 7061 7373 616C 676F  hadow --passalgo
0000050: 3D73 6861 3531 320A 2320 5573 6520 6E65  =sha512.# Use ne
0000060: 7477 6F72 6B20 696E 7374 616C 6C61 7469  twork installati
0000070: 6F6E 0A75 726C 202D 2D75 726C 3D22 6874  on.url --url="ht
0000080: 7470 3A2F 2F6D 6972 726F 722E 6365 6E74  tp://mirror.cent
0000090: 6F73 2E6F 7267 2F63 656E 746F 732F 372F  os.org/centos/7/

수정

수정도 가능하다.

  • 원본 파일을 hex code로 출력한다. (file -> hexdump)

    ~$ xxd /root/anaconda-ks.cfg > temp
    
  • 데이터 부분만 수정한다.

    ~$ vim temp
    
    • 파일 내용 수정 예시

      # 첫 번째 줄을
      0000000: 2376 6572 7369 6F6E 3D44 4556 454C 0A23  #version=DEVEL.#
      
      # 다음과 같이 수정
      # #version -> $version
      0000000: 2476 6572 7369 6F6E 3D44 4556 454C 0A23  #version=DEVEL.#
               --
               ^
               |
               수정
      
  • 수정한 파일을 저장한다. (hexdump -> file)

    ~$ xxd -r temp /root/anaconda-ks-edited.cfg