В Linux команда od
(Octal Dump) служит для преобразования содержимого ввода в различные форматы с восьмеричным форматом в качестве формата по умолчанию.
Утилита особенно полезна при отладке скриптов Linux. Если указано более одного файла, команда od
объединяет их в указанном порядке для формирования входных данных. Она может отображать выходные данные в различных форматах, включая шестнадцатеричный, десятичный и ASCII. Это полезно для визуализации данных, которые не находятся в удобочитаемом формате, например, исполняемый код программы.
Содержание
Синтаксис
od [ПАРАМЕТР]… [ФАЙЛ]…
Печатает однозначное (по умолчанию байтовое восьмеричное) представление ФАЙЛА на стандартный вывод. Если указано несколько ФАЙЛОВ, то для формирования ввода выполняется их объединение по порядку их указания.
Если ФАЙЛ не задан или задан как -
, читает стандартный ввод.
Опции
- -A, --address-radix=ОСНОВАНИЕ
- Выходной формат для файловых смещений; ОСНОВАНИЕ может быть [doxn] — Decimal, Octal, Hex или None
- --endian={big|little}
- Переставлять местами входные байты согласно указанного порядку
- -j, --skip-bytes=Н
- Пропустить первые Н байт
- -N, --read-bytes=Н
- Считывать только Н байт
- -S Н, --strings[=Н]
- Выводить строки длиной, по меньшей мере, Н графических символов; если Н не задано, то используется значение
3
- -t, --format=ТИП
- Выбрать формат или форматы вывода
- -v, --output-duplicates
- Не помечать символом
*
невыводимые строки - -w[Н], --width[=Н]
- Выводить Н байт в каждой выходной строке; если Н не задано, то используется Н=32
- --traditional
- Принимать аргументы как в третьей форме выше
Традиционные спецификации формата можно писать вперемешку, они объединяются:
- -a
- Синоним
-t a
, именованные символы, старший бит игнорируется - -b
- Синоним
-t o1
, восьмеричные байты - -c
- Синоним
-t c
, печатные символы или управляющие последовательности с обратным слешем - -d
- Синоним
-t u2
, беззнаковые десятичные двухбайтовые единицы - -f
- Синоним
-t fF
, числа с плавающей точкой - -i
- Синоним
-t dI
, дсятичные целые - -l
- Синоним
-t dL
, десятичные длинные целые - -o
- Синоним
-t o2
, восьмеричные двухбайтовые единицы - -s
- Синоним
-t d2
, десятичные двухбайтовые единицы - -x
- Синоним
-t x2
, шестнадцатеричные двухбайтовые единицы
ТИП составляется из одного или нескольких следующих спецификаций:
- a
- Именованный символ, старший бит игнорируется
- c
- Печатный символ или управляющая последовательность
- d[ЧИСЛО]
- Знаковое десятичное целое размером в ЧИСЛО байт
- f[ЧИСЛО]
- Число с плавающей точкой размером в ЧИСЛО байт
- o[ЧИСЛО]
- Восьмеричное целое размером в ЧИСЛО байт
- u[ЧИСЛО]
- Беззнаковое десятичное целое размером в ЧИСЛО байт
- x[ЧИСЛО]
- Шестнадцатеричное целое размером в ЧИСЛО байт
Если ФОРМАТ — одно из [doux], ЧИСЛО может задаваться как C
для sizeof(char), S
для sizeof (short), I
для sizeof(int) или L
для sizeof(long). Если ФОРМАТ равен f
, то ЧИСЛО также может быть F
для sizeof(float), D
для sizeof(double) или L
для sizeof (long double).
Добавляет суффикс z
к любым показываемым печатным символам в конце каждой выходной строки.
Н задаётся шестнадцатеричным числом с префиксом 0x или 0X, и может содержать умножающий суффикс:
- b
- 512
- KB
- 1000
- K
- 1024
- MB
- 1000*1000
- M
- 1024*1024
и так далее для G, T, P, E, Z, Y.
Также можно использовать двоичные префиксы: KiB=K, MiB=M и так далее.
Использование команды od в Linux
Содержимое ввода в восьмеричном формате
Для отображения содержимого ввода в восьмеричном формате используется опция -b
.
Пример:
oleg@mobile:~/Directory:$ cat od-example-1.txt
100
101
102
103
104
105
oleg@mobile:~/Directory:$
Вывод:
oleg@mobile:~/Directory:$ od -b od-example-1.txt
0000000 061 060 060 012 061 060 061 012 061 060 062 012 061 060 063 012
0000020 061 060 064 012 061 060 065 012
0000030
oleg@mobile:~/Directory:$
Первый столбец в выводе od
представляет смещение в байтах в файле.
Содержимое ввода в символьном формате
Для вывода содержимого того же файла в символьном формате используется опция -c
:
oleg@mobile:~/Directory:$ od -c od-example-1.txt
0000000 1 0 0 \n 1 0 1 \n 1 0 2 \n 1 0 3 \n
0000020 1 0 4 \n 1 0 5 \n
0000030
oleg@mobile:~/Directory:$
Содержимое ввода в символьном формате без информации о смещении
В данном случае для вывода содержимого того же файла была использованы опции -An -c
:
oleg@mobile:~/Directory:$ od -An -c od-example-1.txt
1 0 0 \n 1 0 1 \n 1 0 2 \n 1 0 3 \n
1 0 4 \n 1 0 5 \n
oleg@mobile:~/Directory:$
Объединение специальных символов
С опцией -A
можно объединить следующие специальные символы d
, o
, x
.
Пример:
oleg@mobile:~/Directory:$ od -Ad -c od-example-1.txt
0000000 1 0 0 \n 1 0 1 \n 1 0 2 \n 1 0 3 \n
0000016 1 0 4 \n 1 0 5 \n
0000024
oleg@mobile:~/Directory:$ od -Ao -c od-example-1.txt
0000000 1 0 0 \n 1 0 1 \n 1 0 2 \n 1 0 3 \n
0000020 1 0 4 \n 1 0 5 \n
0000030
oleg@mobile:~/Directory:$ od -Ax -c od-example-1.txt
000000 1 0 0 \n 1 0 1 \n 1 0 2 \n 1 0 3 \n
000010 1 0 4 \n 1 0 5 \n
000018
oleg@mobile:~/Directory:$
Ввод из командной строки
Результат ввода из командной строки:
oleg@mobile:~/Directory:$ od -c -
next week0000000 n e x t w e e k
0000011
oleg@mobile:~/Directory:$
Вывод команды od
отображается после нажатия ctrl+d.
Вывод скрытого символа
Для вывода скрытых символов используется лишь опция -c
:
oleg@mobile:~/Directory:$ od -c usa-states.txt
0000000 A l a b a m a \n A l a s k a \n A
0000020 r i z o n a \n A r k a n s a s \n
0000040 C a l i f o r n i a \n C o l o r
0000060 a d o \n C o n n e c t i c u t \n
0000100 D e l a w a r e \n F l o r i d a
0000120 \n G e o r g i a \n H a w a i i \n
0000140 I d a h o \n I l l i n o i s I n
0000160 d i a n a \n I o w a \n K a n s a
0000200 s \n K e n t u c k y \n L o u i s
0000220 i a n a \n M a i n e \n M a r y l
0000240 a n d \n M a s s a c h u s e t t
0000260 s \n M i c h i g a n \n M i n n e
0000300 s o t a \n M i s s i s s i p p i
0000320 \n M i s s o u r i \n M o n t a n
0000340 a N e b r a s k a \n N e v a d a
0000360 \n N e w H a m p s h i r e \n N
0000400 e w J e r s e y \n N e w M e
0000420 x i c o \n N e w Y o r k \n N o
0000440 r t h C a r o l i n a \n N o r
0000460 t h D a k o t a \n O h i o \n O
0000500 k l a h o m a \n O r e g o n \n P
0000520 e n n s y l v a n i a R h o d e
0000540 I s l a n d \n S o u t h C a
0000560 r o l i n a \n S o u t h D a k
0000600 o t a \n T e n n e s s e e \n T e
0000620 x a s \n U t a h \n V e r m o n t
0000640 \n V i r g i n i a \n W a s h i n
0000660 g t o n \n W e s t V i r g i n
0000700 i a \n W i s c o n s i n \n W y o
0000720 m i n g \n
0000725
oleg@mobile:~/Directory:$
В выводе содержимого этого текстового файла мы видим символы перевода каретки \n
.
Заключение
В статье были приведены основные приёмы работы в Linux c командой od
. Эта команда с использованием различных параметров позволяет преобразовывать данные в различные форматы.