
$ echo "hello" | od
0000000 062550 066154 005157
0000006
첫 번째 열이 바이트 오프셋을 나타내는 것으로 알고 있습니다. 하지만 다른 숫자가 어떻게 형성되는지는 알 수 없습니다. 위의 내용 에 따르면 man
"8진수 바이트"여야 합니다. 그러나 이 옵션은 -b
"8진수 바이트 선택"도 수행해야 하며 다른 내용을 인쇄합니다.
$echo "hello" | od -b
0000000 150 145 154 154 157 012
0000006
편집: 이것은 내가 예상하는 것입니다. 즉, 'hello\n'에 있는 모든 문자의 ASCII 값이 "8진수 바이트"라고 불릴 것으로 예상됩니다.
답변1
od
기본적으로 바이트를 표시하지 않고 단어를 8진수로 표시합니다. 이는 직관적 od
이지 않을 수도 있지만매우이전 명령 :-) 나는 당신이 했던 것보다 다소 간단한 예를 사용하겠습니다:
$ echo -en '\01\02' | od
0000000 001001
0000002
인텔이 사용하는 것처럼리틀 엔디안건축학, 바이트는 바이너리 \01\02
로 해석됩니다 00000010 00000001
.
8진수는 각각 3비트를 나타내므로 해당 숫자를 다음과 같이 그룹화할 수 있습니다.
(0)(000)(001)(000)(000)(001)
따라서 해당 2바이트의 8진수 표현은 다음과 같습니다.
001001
매일 사용하는 경우 이것은 꽤 쓸모가 없습니다. 아마도 예전에는 메모리 덤프를 수동으로 디버깅하는 데 편리했을 것입니다. :-)
귀하의 hello\n
예는 다음과 같습니다
h = 01101000
e = 01100101
l = 01101100
l = 01101100
o = 01101111
\n= 00001010
이제 좀 더 복잡해졌습니다. 왜냐하면 8진수는 3비트를 나타내지만 바이트는 8비트이기 때문입니다. 그래서 패딩이 추가되었습니다 :-( 결과는 상징적으로 다음과 같습니다:
PehPllP\no
엔디안으로 인해 각 2바이트 세트가 교체된다는 점을 기억하세요. 그만큼피2비트의 패딩입니다. 8진수 결과는 다음과 같습니다(슬래시를 구분 기호로 사용).
00/01100101/01101000/00/01101100/01101100/00/00001010/01101111
이제 3비트의 8진수 그룹:
000 110 010 101 101 000 000 110 110 001 101 100 000 000 101 001 101 111
8진수로 변환하면 다음과 같습니다.
062550066154005157
이는 귀하의 결과와 일치합니다.
od
결론적으로 옵션이 없는 것은 쓸모없는 것보다 더 나쁘다는 것을 배웠을 것입니다 . :-)