The od
(octal dump) command is a versatile tool that outputs the contents of a specified file in various formats such as octal, decimal, hexadecimal, floating-point numbers, or ASCII characters. It displays the content to the standard output (usually the terminal), with the leftmost column showing the byte offset, starting from 0.
Function:
The od
command outputs file content in various formats like octal, decimal, hexadecimal, floating-point, or ASCII, with the byte offset displayed in the leftmost column. It can handle both text and binary files and is typically used to view file data that cannot be directly displayed in the terminal, such as binary data. The command can interpret the file content and output its values in various formats, whether they are IEEE754 floating-point numbers or ASCII codes. You might also want to check out the hexdump
command, which by default outputs data in hexadecimal format but isn’t as powerful as od
.
Syntax:
od [OPTION…] [FILE…]
Key Options:
-A RADIX
or--address-radix=RADIX
: Specifies the radix (base) for the byte offset. By default, the offset is displayed in octal.-j BYTES
or--skip-bytes=BYTES
: Skips the specified number of bytes before displaying the file content.-N BYTES
or--read-bytes=BYTES
: Outputs only the specified number of bytes.-S [BYTES]
or--strings[=BYTES]
: Outputs strings at leastBYTES
bytes long (default is 3).-v
or--output-duplicates
: Ensures that duplicate data is not omitted in the output.-w [BYTES]
or--width[=BYTES]
: Sets the number of bytes to display per line (default is 32 bytes).-t TYPE
or--format=TYPE
: Specifies the format of the output. Options include:a
: Named characters (e.g., newline is shown as “nl”).c
: Printable characters or escaped sequences (e.g., newline is shown as “\n”).d[SIZE]
: Signed decimal integers of SIZE bytes (default issizeof(int)
).f[SIZE]
: Floating-point numbers of SIZE bytes (default issizeof(double)
).o[SIZE]
: Octal integers of SIZE bytes (default issizeof(int)
).u[SIZE]
: Unsigned decimal integers of SIZE bytes (default issizeof(int)
).x[SIZE]
: Hexadecimal integers of SIZE bytes (default issizeof(int)
).
SIZE
can be specified as 1 (byte), or as uppercase letters like C (char), S (short), I (int), and L (long). For floating-point numbers,SIZE
can be F (float), D (double), or L (long double).--help
: Displays help information.--version
: Displays version information.
Parameters:
FILE…
: One or more files whose content will be displayed.
Examples:
Example 1: Basic Output
$ cat test.txt
abcd 12345
$ od test.txt
0000000 061141 062143 030440 031462 032464 000012
0000013
In this output, the first column shows the byte offset (default in octal).
Example 2: Show Byte Offset in Decimal
$ od -Ad test.txt
0000000 061141 062143 030440 031462 032464 000012
0000011
Example 3: Hide Byte Offset
$ od -An test.txt
061141 062143 030440 031462 032464 000012
Example 4: Output in Hexadecimal (4 Bytes per Group)
$ od -tx test.txt
0000000 64636261 33323120 000a3534
0000013
Example 5: Output in Hexadecimal (1 Byte per Group)
$ od -tx1 test.txt
0000000 61 62 63 64 20 31 32 33 34 35 0a
0000013
Example 6: Display Named ASCII Characters
$ od -ta test.txt
0000000 a b c d sp 1 2 3 4 5 nl
0000013
Or display printable characters and escape sequences:
$ od -tc test.txt
0000000 a b c d 1 2 3 4 5 \n
0000013
Example 7: Hexadecimal with Original Characters
$ od -tcx1 test.txt
0000000 a b c d 1 2 3 4 5 \n
61 62 63 64 20 31 32 33 34 35 0a
0000013
Example 8: Specify Bytes per Line
$ od -w8 -tc test.txt
0000000 a b c d 1 2 3
0000010 4 5 \n
0000013
Example 9: Remove Spaces Between Columns
To remove spaces between columns during od
output:
- Use
-An
to hide the offset. - Use
-v
to avoid omitting duplicate data. - Use
-tx1
to output one byte per group in hexadecimal format, and-w1
to display one byte per line. - Finally, pipe the output to
awk
to concatenate it into a single line.
$ od -An -w1 -tx1 test.txt | awk '{for(i=1;i<=NF;++i){printf "%s",$i}}'
616263642031323334350a