玩linux系统没多久,发现了一个奇怪的地方:我通过 vim 向文件内输入一串字母“abcd”,结果发现文件大小为5字节。很奇怪,便去问群友。照着他们的建议,又写了一个程序将文件中的字符按 ASCII 码挨个读出来,结果发现多出的一字节是结尾的换行符 '\n' 。
刚才无意间又看到一个 linux 命令 od ,起作用就是按照一定的格式将文件内容打印出来。下面是手册中截下来的用法:
od [OPTION]... [FILE]...
od [-abcdfilosx]... [FILE] [[+]OFFSET[.][b]]
od --traditional [OPTION]... [FILE] [[+]OFFSET[.][b] [+][LABEL][.][b]]
运用该命令,只需要键入“od -c test.txt” 便可以得到文件中的准确信息了:
0000000 a b c d \n
0000005
选项 -c 相当于 -t c ,表示输出可打印字符和转义字符。最左边的一串数字为该行起始位的文件偏移量。
以下是完整的选项说明和输出类型的说明:
Write an unambiguous representation, octal bytes by default, of FILE to standard output. With more than one FILE argument, concatenate them in the listed order to form
the input.
With no FILE, or when FILE is -, read standard input.
If first and second call formats both apply, the second format is assumed if the last operand begins with + or (if there are 2 operands) a digit. An OFFSET operand 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 hexadecimal; suf-
fixes may be . for octal and b for multiply by 512.
Mandatory arguments to long options are mandatory for short options too.
-A, --address-radix=RADIX
output format for file offsets; RADIX is one of [doxn], for Decimal, Octal, Hex or None
--endian={big|little}
swap input bytes according the specified order
-j, --skip-bytes=BYTES
skip BYTES input bytes first
-N, --read-bytes=BYTES
limit dump to BYTES input bytes
-S BYTES, --strings[=BYTES]
output strings of at least BYTES graphic chars; 3 is implied when BYTES is not specified
-t, --format=TYPE
select output format or formats
-v, --output-duplicates
do not use * to mark line suppression
-w[BYTES], --width[=BYTES]
output BYTES bytes per output line; 32 is implied when BYTES is not specified
--traditional
accept arguments in third form above
--help display this help and exit
--version
output version information and exit
-a same as -t a, select named characters, ignoring high-order bit
-b same as -t o1, select octal bytes
-c same as -t c, select printable characters or backslash escapes
-d same as -t u2, select unsigned decimal 2-byte units
-f same as -t fF, select floats
-i same as -t dI, select decimal ints
-l same as -t dL, select decimal longs
-o same as -t o2, select octal 2-byte units
-s same as -t d2, select decimal 2-byte units
-x same as -t x2, select hexadecimal 2-byte units
a named character, ignoring high-order bit
c printable character or backslash escape
d[SIZE]
signed decimal, SIZE bytes per integer
f[SIZE]
floating point, SIZE bytes per float
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).
Adding a z suffix to any type displays printable characters at the end of each output line.
更多内容参考手册