Od

Command od
Dump an unambiguous representation of a file or user input to stdout in octal, decimal, hex or ASCII format. Very useful for determining just what control characters are in a file or filename.

Syntax
od [OPTION]... [FILE]... od --traditional [FILE] +]OFFSET [[+]LABEL

NOTE: This page was based on the 4.5.3 coreutils man page included with Red Hat 9. For a current definition please see the od reference at the [[GNU] site]

Options
-A, --address-radix=RADIX decide how file offsets are printed

-j, --skip-bytes=BYTES skip BYTES input bytes first

-N, --read-bytes=BYTES limit dump to BYTES input bytes

-s, --strings[=BYTES] output strings of at least BYTES graphic chars

-t, --format=TYPE select output format or formats

-v, --output-duplicates do not use * to mark line suppression

-w, --width[=BYTES] output BYTES bytes per output line

--traditional accept arguments in traditional form

--help display this help and exit

--version output version information and exit

Traditional format specifications may be intermixed; they accumulate: -a    same as -t a,  select named characters

-b    same as -t oC, select octal bytes

-c    same as -t c,  select ASCII characters or backslash escapes

-d    same as -t u2, select unsigned decimal shorts

-f    same as -t fF, select floats

-h    same as -t x2, select hexadecimal shorts

-i    same as -t d2, select decimal shorts

-l    same as -t d4, select decimal longs

-o    same as -t o2, select octal shorts

-x    same as -t x2, select hexadecimal shorts

For older syntax (second call format), OFFSET means -j OFFSET. LABEL is the  pseudo-address at first byte printed, incremented when dump is progressing. For OFFSET and LABEL, a 0x or 0X prefix  indicates  hex- adecimal, suffixes may be. for octal and b for multiply by 512.

TYPE is made up of one or more of these specifications:

a     named character

c     ASCII character or backslash escape

d[SIZE] signed decimal, SIZE bytes per integer

f[SIZE] floating point, SIZE bytes per integer

o[SIZE] octal, SIZE bytes per integer

u[SIZE] unsigned decimal, SIZE bytes per integer

x[SIZE] hexadecimal, SIZE bytes per integer

SIZE is  a  number. For TYPE  in  doux,  SIZE  may  also  be  C for sizeof(char), S  for  sizeof(short),  I  for  sizeof(int)  or  L   for sizeof(long). If TYPE  is f, SIZE may also be F for sizeof(float), D for sizeof(double) or L for sizeof(long double).

RADIX is d for decimal, o for octal, x for hexadecimal or n for  none. BYTES is hexadecimal with 0x or 0X prefix, it is multiplied by 512 with b suffix, by 1024 with k and by 1048576 with m. Adding a z  suffix  to any type adds a display of printable characters to the end of each line of output. --string without a number implies 3. --width without  a number implies 32. By default, od uses -A o -t d2 -w 16.

Examples
A simple one $ echo "hello world" | od 0000000 062550 066154 020157 067567 066162 005144 0000014

As mentioned above, od can be used to locate strange characters in files. Imagine you are writing a program that takes input from a file and for some reason it just doesn't work with a particular file, run it through od and you may see why:


 * 1) cat afile

So it looks like the file afile contains the above text. Let's make sure: 0000000  T   h   i   s       i   s       a       f   i   l   e       w         124 150 151 163 040 151 163 040 141 040 146 151 154 145 040 167 0000020  i   t   h       a       n   o   n   -   p   r   i   n   t   i         151 164 150 040 141 040 156 157 156 055 160 162 151 156 164 151 0000040  n   g       c   o   n   t   r   o   l       c   h   a   r   a         156 147 040 143 157 156 164 162 157 154 040 143 150 141 162 141 0000060  c   t   e   r       h   e   r   e       >  \r   <  \n 143 164 145 162 040 150 145 162 145 040 076 015 074 012
 * 1) od -cb afile

As you can see, just using cat doesn't show you the character. When we run the file through od we can see that there is actually a carriage return in there BETWEEN the '>' and '<' characters but cat sees it as a command to move back to the start of the line so we don't see the T at the start of the line as it gets overwritten by the final < character!

Provided by
Most (all?) Linux distributions incorporate this from the GNU Coreutils project and use its man page

Related Commands
These all relate to the output or processing of entire files
 * hexdump -- similar program specific to dumping in hexidecimal.
 * cat -- concatenate files into a single result.
 * tac -- line-reversed cat
 * rev -- character-reversed cat
 * nl -- output with line numbers
 * base32 -- Encode in printable characters.
 * base64 -- Encode in printable characters.