Unix:ppm 파일에 xxd 명령 사용

Unix:ppm 파일에 xxd 명령 사용

나는 유닉스를 처음 접했고 일부 명령의 기능을 이해할 수 없습니다. 예를 들어, xxdppm 파일(예: ) xxd image.ppm에 사용 하면 다음과 같은 출력이 표시됩니다.

00000000: 5036 0a31 3131 2031 3332 0a32 3535 0a55  P6.111 132.255.U
00000010: 6137 5966 3958 6939 566a 3953 6739 5464  a7Yf9Xi9Vj9Sg9Td
00000020: 3b57 643a 5763 3654 6335 5161 334e 5c30  ;Wd:Wc6Tc5Qa3N\0
00000030: 4f5a 3250 5d35 5361 3556 6334 5561 3352  OZ2P]5Sa5Vc4Ua3R
00000040: 5e32 515d 3256 6035 5b64 3856 6136 4a55  ^2Q]2V`5[d8Va6JU
...
...

누군가 이 출력이 무엇을 나타내는지 설명해 줄 수 있나요?

답변1

세 부분은 16진수 데이터와 문자 데이터(인쇄 가능한 경우)로 표현된 입력 시작 부분의 오프셋입니다. 행은 좋은 정수이고 화면에 잘 맞기 때문에 16바이트입니다.

이러한 표시는 바이너리 데이터와 텍스트 데이터가 모두 중요한 상황에서 자주 사용됩니다. 예를 들어 tcpdump -X 이와 같은 것을 사용하십시오.

첫 번째 줄에:

00000000: 5036 0a31 3131 2031 3332 0a32 3535 0a55  P6.111 132.255.U

오프셋 00000000은 0입니다. 왜냐하면 그것이 시작이기 때문입니다. 50, 36및 개행 문자 등 0a의 문자 코드 입니다. 인쇄할 수 없는 문자는 오른쪽 열에 점으로 인쇄됩니다.P6


어떤 변형에서는 중간 섹션의 바이트가 각 그룹 내에서 "역전"될 수 있습니다. 이는 프로그램이 입력을 연결된 개별 바이트가 아닌 리틀 엔디안 숫자로 해석하고 표시하는 경우 발생할 수 있습니다.

xxd -e그것이 바로 그것이 하는 일입니다. 고려하다:

$ printf  "ABCD" | xxd -e -g2 
00000000: 4241 4443                                ABCD

41for A42for B그리고 나머지 두 개는 역순으로 나타납니다. odGNU coreutils는 또한 그룹 내에서 바이트를 반대로 바꿉니다. 의심스러운 경우 다시 확인하거나 일대일 그룹화를 시도하세요. (예 od -xod -tx1여기를 비교하십시오.)


물론, 데이터 자체의 의미는ppm 형식의 문서에서도 찾아볼 수 있습니다. 내 시스템에는 매뉴얼 페이지가 있습니다 ppm(5). (온라인die.net 버전형식이 손상되었습니다. )

첫 번째 행에서 샘플당 8비트의 111x132 픽셀 크기의 RGB 이미지임을 알 수 있습니다.

답변2

이는 매우 일반적인 16진수 덤프 형식의 16진수 덤프이며, 출력의 각 줄에는 바이트 오프셋(16진수*), 16바이트 16진수 숫자 및 동일한 바이트의 ASCII 표현이 포함되어 있습니다.

* 각 행에 대해 바이트 오프셋이 0x10 16진수(16진수)씩 증가하는 방식에 유의하세요.

에서 man xxd:

이름

   xxd - make a hexdump or do the reverse.

요약

   xxd -h[elp]
   xxd [options] [infile [outfile]]
   xxd -r[evert] [options] [infile [outfile]]

설명하다

xxd 주어진 파일이나 표준 입력의 16진수 덤프를 만듭니다. 또한 16진수 덤프를 원래의 바이너리 형식으로 다시 변환할 수도 있습니다. uuencode(1) 및 (1) 과 마찬가지로 uudecode이진 데이터를 "메일 안전" ASCII 표현으로 전송할 수 있지만 표준 출력으로 디코딩할 수 있다는 장점이 있습니다. 또한 바이너리 패치를 수행하는 데에도 사용할 수 있습니다. [...]

16진수 덤프는 파일의 정확한 위치에 몇 바이트가 있는지 정확히 알아야 할 때 유용합니다. 예를 들어 파일에 예기치 않은 바이트(예: NUL( 0x00) 또는 캐리지 리턴())가 있는 경우 및 @ilkkachu가 답변에서 언급한 것처럼 이진 파일 형식이 문서화되어 있는 경우(또는 발생하는 경우) 문제를 진단하는 데 도움이 될 수 있습니다. 어쨌든 알려짐) 일반적 으로 0x0D특정 오프셋(위치)에서 바이트의 특정 의미를 해석할 수 있습니다.

관련 정보