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.
od [OPTION]... [FILE]... od --traditional [FILE] [[+]OFFSET [[+]LABEL]]
decide how file offsets are printed
skip BYTES input bytes first
limit dump to BYTES input bytes
output strings of at least BYTES graphic chars
select output format or formats
do not use * to mark line suppression
output BYTES bytes per output line
accept arguments in traditional form
--help display this help and exit
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
signed decimal, SIZE bytes per integer
floating point, SIZE bytes per integer
octal, SIZE bytes per integer
unsigned decimal, SIZE bytes per integer
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.
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:
# cat afile <his is a file with a non-printing control character here >
So it looks like the file afile contains the above text. Let's make sure:
# od -cb afile 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
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!
These all relate to the output or processing of entire files