나는 유닉스를 처음 접했고 일부 명령의 기능을 이해할 수 없습니다. 예를 들어, xxd
ppm 파일(예: ) 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
의 문자 코드 입니다. 인쇄할 수 없는 문자는 오른쪽 열에 점으로 인쇄됩니다.P
6
어떤 변형에서는 중간 섹션의 바이트가 각 그룹 내에서 "역전"될 수 있습니다. 이는 프로그램이 입력을 연결된 개별 바이트가 아닌 리틀 엔디안 숫자로 해석하고 표시하는 경우 발생할 수 있습니다.
xxd -e
그것이 바로 그것이 하는 일입니다. 고려하다:
$ printf "ABCD" | xxd -e -g2
00000000: 4241 4443 ABCD
41
for A
와 42
for B
그리고 나머지 두 개는 역순으로 나타납니다. od
GNU coreutils는 또한 그룹 내에서 바이트를 반대로 바꿉니다. 의심스러운 경우 다시 확인하거나 일대일 그룹화를 시도하세요. (예 od -x
와 od -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
특정 오프셋(위치)에서 바이트의 특정 의미를 해석할 수 있습니다.