Por razões históricas histéricas , od
imprime palavras de dois bytes¹ por padrão.
O número 020061 (octal) corresponde à sequência de dois bytes 1␣
( ␣
é um caractere de espaço). Por quê? É mais claro se você usar hexadecimal: 0o20061 = 0x2031 e ␣
é 0x20 (32) em ASCII e 1
é 0x31 (49). Observe que os bits de ordem inferior (0x31) correspondem ao primeiro caractere e os bits de ordem superior correspondem ao segundo caractere: od está montando as palavras em little-endian ordem, porque essa é a condição do seu sistema."
A ordem little-endian não é muito natural aqui porque um dos formatos de saída ( -c
) imprime caracteres, o outro ( -o
) imprime palavras. Cada palavra é impressa como um número na notação usual big-endian (o dígito mais significativo vem primeiro em nossa ordem de leitura da esquerda para a direita). Isso é ainda mais aparente em hexadecimal, onde os limites de bytes são claramente aparentes na saída numérica:
echo '1 text' | od -xc
0000000 2031 6574 7478 000a
1 t e x t \necho '1 text' | od -xc
0000000 2031 6574 7478 000a
1 t e x t \n%pre%
Se você preferir ver o arquivo como uma seqüência de bytes, use od -t x1
(ou hd
se você tiver).
¹ Era uma vez, os homens eram homens de verdade, os computadores eram computadores reais, os números eram geralmente escritos em octal e as palavras tinham dois bytes de comprimento.
² Todos os PCs (x86, x86-64) são little-endian, assim como o PDP-11 onde o Unix começou. Os processadores ARM podem lidar com o endianness, mas o Linux e o iOS o usam no modo little-endian. Então, a maioria das plataformas que você provavelmente encontrará hoje em dia são little-endian.