ИМЯ¶
xxd - создаёт
представление
файла в виде
шестнадцатеричных
кодов или
выполняет
обратное
преобразование.
КОМАНДНАЯ
СТРОКА¶
xxd -h[elp]
xxd [ключи]
[входной_файл
[выходной_файл]]
xxd -r[evert] [ключи]
[входной_файл
[выходной_файл]]
ОПИСАНИЕ¶
xxd создаёт
представление
указанного
файла или
данных,
прочитанных
из потока
стандартного
ввода, в виде
шестнадцатеричных
кодов. Эта
команда
также может
выполнить
обратное
преобразование
заданных
шестнадцатеричными
кодами
данных в
исходный
бинарный
формат.
Подобно
командам
uuencode(1)
и
uudecode(1), она
позволяет
выполнять
преобразование
бинарных
данных в
ASCII-код, который
можно
передавать
по
электронной
почте,
однако,
помимо
этого,
программа xxd
позволяет
выполнять
декодирование
в поток
стандартного
вывода, а
также может
применяться
для создания
заплаток для
бинарных
файлов.
КЛЮЧИ
ЗАПУСКА¶
Если
входной_файл
не задан, то
соответствующие
данные
читаются из
потока
стандартного
ввода. В
случае, если
в качестве
входного_файла
используется
символ `
-',
источником
данных также
выступает
поток
стандартного
ввода. В том
случае, если
не указан
выходной_файл
(или вместо
него
используется
символ `
-' ),
результат
преобразования
направляется
в поток
стандартного
вывода.
Обратите
внимание,
что
используется
"ленивый"
алгоритм
разбора
ключей,
который не
проверяет
более одной
буквы ключа,
если в этом
ключе не
используется
параметр.
Пробелы
между
единственным
символом
ключа и
соответствующим
параметром
не являются
обязательными.
Параметры
ключей могут
быть заданы
с
использованием
десятичного,
шестнадцатеричного
или
восьмеричного
формата.
Таким
образом,
ключи
-c8,
-c 8,
-c 010
и
-cols 8
являются
равнозначными.
- -a | -autoskip
- Включает
автоматический
пропуск:
вместо
последовательности
нулевых
строк
используется
одиночный
символ '*'. По
умолчанию
не
применяется.
- -b | -bits
- Вместо
шестнадцатеричного
кода
используются
биты
(двоичные
цифры). При
использовании
этого ключа
вместо
обычного
шестнадцатеричного
представления
октетов
используются
наборы из
восьми
символов "1"
и "0". Каждая
строка
предваряется
номером
строки в
шестнадцатеричном
виде, а
завершается
символьным
представлением
(в виде ascii или ebcdic).
Ключи -r, -p, -i в
этом режиме
не
работают.
- -c кол | -cols
кол
- Задаёт
количество
октетов
<кол>,
которое
выводится
на каждой
строке. По
умолчанию
используется
значение 16 (-i: 12, -ps:
30, -b: 6).
Максимально
допустимое
значение: 256.
- -E | -EBCDIC
- Изменяет
способ
кодирования
символов в
правой
колонке с ASCII
на EBCDIC. Этот
ключ не
изменяет
шестнадцатеричное
представление.
Данный ключ
не имеет
смысла, если
используются
ключи -r, -p или -i.
- -g байт | -groupsize
байт
- Позволяет
выполнять
группировку
указанного
количества
<байтов>
(две
шестнадцатеричные
цифры или
восемь
битов),
отделяя
группы друг
от друга
пробелами.
Значение -g 0
применяется
для отказа
от
использования
группировки.
По
умолчанию
используется
значение
<байт>
равное 2 в
обычном
режиме и 1 в
битовом
режиме.
Группировка
не
применяется
в режимах postscript
и include.
- -h | -help
- Выводит
справку по
доступным
ключам
командной
строки и
завершает
работу
программы.
Создание
шестнадцатеричного
представления
не
выполняется.
- -i | -include
- Позволяет
создавать
вывод в
стиле
подключаемых
заголовочных
файлов
языка C. Вывод
содержит
полноценное
определение
статического
массива
данных, имя
которого
соответствует
имени
входного
файла, если xxd
не
считывает
данные из
потока
стандартного
ввода.
- -l длина | -len
длина
- Завершает
работу
после
записи
заданного в
параметре
<длина>
количества
октетов.
- -p | -ps | -postscript |
-plain
- Использует
непрерывный
формат
вывода
шестнадцатеричного
кода,
известный
как
"простой"
стиль или
стиль "postscript".
- -r | -revert
- Изменяет
смысл
операции на
противоположный:
позволяет
выполнять
преобразование
шестнадцатеричного
представления
в бинарный
код (или
применять
результат в
качестве
заплаты).
Если вывод
происходит
не в поток
стандартного
вывода, то xxd
выполняет
добавление
кода к
соответствующему
файлу. При
использовании
комбинации
ключей -r -p
происходит
чтение
"простого"
шестнадцатеричного
представления
без
использования
информации
о номерах
строк и
какого-либо
специального
раскроя
колонок.
Пробелы и
символы
новой
строки
могут
встречаться
в любом
месте
исходных
данных.
- -seek
смещение
- При
использовании
после ключа
-r :
добавлять
указанное
<смещение>
к файловым
позициям,
обнаруженным
в исходных
данных.
- -s [+][-]seek
- Начинает
работу с
указанного
абсолютного
(или
относительного)
<смещения>
в байтах во
входном_файле.
+ указывает,
что
смещение
является
относительным
по
отношению к
текущей
файловой
позиции в
потоке
стандартного
ввода
(бессмысленно,
если чтение
происходит
не из потока
стандартного
ввода). -
указывает,
что должно
быть
прочитано
указанное
количество
символов от
конца ввода
(либо, если
сочетается
с + : перед
текущей
позиции
файла в
потоке
стандартного
ввода). Если
ключ -s не
используется,
то xxd
начинает
работу от
текущей
позиции в
файле.
- -u
- Использует
шестнадцатеричные
цифры в
верхнем
регистре. По
умолчанию
используются
цифры в
нижнем
регистре
символов.
- -v | -version
- Отображает
информацию
о версии
программы.
ПОДВОДНЫЕ
КАМНИ¶
xxd -r обладает
встроенным
интеллектом
для
распознавания
информации о
номерах
строк. Если
возможен
поиск по
входному
файлу, то
номера строк
в начале
каждой
строки
шестнадцатеричного
представления
могут быть
неупорядоченными,
некоторые
строки могут
быть
пропущены
или
пересекаться
друг с
другом. В
этих случаях
xxd использует
lseek(2) для
перехода к
следующей
позиции.
Если поиск
по входному
файлу
невозможен,
то допустимы
только
пропуски
строк,
которые
заполняются
нулевыми
байтами.
xxd -r никогда не
выводит
сообщений об
ошибках.
Мусор
пропускается
молча.
При
редактировании
шестнадцатеричных
представлений
бинарных
файлов
обращайте
внимание,
что
xxd -r
пропускает в
строке ввода
любые данные
после
прочтения
достаточного
количества
колонок
шестнадцатеричных
данных (см.
ключ -c). Это
означает,
что
изменения,
внесенные в
колонки с
печатными
символами ascii
(или ebcdic), всегда
игнорируются.
При обратном
преобразовании
шестнадцатеричного
представления
в стиле postscript с
помощью
команды xxd -r -p
количество
колонок не
учитывается.
В этом
случае
распознаются
все символы,
которые
похожи на
пары
шестнадцатеричных
цифр.
Обратите
внимание на
различие
между
командами
% xxd -i файл
и
% xxd -i < файл
Команда
xxd -s +seek
может
отличаться
от
xxd -s seek,
поскольку
для того,
чтобы
"отмотать"
данные на
входе назад,
используется
вызов lseek(2). При
использовании
`+' поведение
будет
отличаться,
если входные
данные
поступают с
потока
стандартного
ввода, а
позиция в
файле
стандартного
ввода не
находится в
начале файла
к тому
моменту,
когда
программа xxd
запущена и
приступает к
чтению
ввода.
Нижеследующие
примеры
помогут
прояснить
(или ещё
больше
запутать!)
ситуацию...
Отмотка
назад потока
стандартного
ввода;
необходимо,
поскольку 'cat'
уже
выполнила
чтение до
конца потока
стандартного
ввода:
% sh -c 'cat > plain_copy; xxd -s 0 > hex_copy' < file
Вывод
шестнадцатеричного
представления
от позиции в
файле 0x480 (= 1024+128).
Символ `+'
означает
"относительно
текущей
позиции",
таким
образом `128'
добавляется
к первому
килобайту,
где
завершает
работу dd:
% sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +128 > hex_snippet'
< file
Вывод
шестнадцатеричного
представления
от позиции в
файле 0x100 (= 1024-768):
% sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +-768 > hex_snippet'
< file
В то же время,
следует
заметить,
что подобные
ситуации
встречаются
довольно
редко, так
что символ `+'
обычно не
используется.
Автор
предпочитает
наблюдать за
работой xxd с
помощью strace(1)
или truss(1) в тех
случаях,
когда
применяется
ключ -s.
ПРИМЕРЫ¶
Вывести всё,
кроме первых
трёх строк (0x30
байтов)
файла
file :
% xxd -s 0x30 file
Вывести три
строки (0x30
байтов) от
конца файла
file :
% xxd -s -0x30 file
Вывести 120
байтов в
виде
непрерывного
шестнадцатеричного
представления
по 20 октетов в
строке:
% xxd -l 120 -ps -c 20 xxd.1
2e544820585844203120224d616e75616c207061
676520666f7220787864220a2e5c220a2e5c2220
32317374204d617920313939360a2e5c22204d61
6e207061676520617574686f723a0a2e5c222020
2020546f6e79204e7567656e74203c746f6e7940
7363746e7567656e2e7070702e67752e6564752e
Вывести
первые 120
байтов этой
страницы
справочника
по 12 октетов в
строке:
% xxd -l 120 -c 12 xxd.1
0000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
000000c: 616e 7561 6c20 7061 6765 2066 anual page f
0000018: 6f72 2078 7864 220a 2e5c 220a or xxd"..\".
0000024: 2e5c 2220 3231 7374 204d 6179 .\" 21st May
0000030: 2031 3939 360a 2e5c 2220 4d61 1996..\" Ma
000003c: 6e20 7061 6765 2061 7574 686f n page autho
0000048: 723a 0a2e 5c22 2020 2020 546f r:..\" To
0000054: 6e79 204e 7567 656e 7420 3c74 ny Nugent <t
0000060: 6f6e 7940 7363 746e 7567 656e ony@sctnugen
000006c: 2e70 7070 2e67 752e 6564 752e .ppp.gu.edu.
Показать
дату из
файла xxd.1:
% xxd -s 0x28 -l 12 -c 12 xxd.1
0000028: 3231 7374 204d 6179 2031 3939 21st May 199
Скопировать
входной_файл
в
выходной_файл
с
добавлением
100 байтов со
значением 0x00 в
начало
файла:
% xxd
входной_файл
| xxd -r -s 100 >
выходной_файл
Заменить
дату в файле
xxd.1:
% echo '0000029: 3574 68' | xxd -r - xxd.1
% xxd -s 0x28 -l 12 -c 12 xxd.1
0000028: 3235 7468 204d 6179 2031 3939 25th May 199
Создать
65537-байтный
файл, все
байты
которого
имеют
значение 0x00,
кроме
последнего
байта,
который
должен иметь
значение 'A' (0x41):
% echo '010000: 41' | xxd -r > file
Создать
шестнадцатеричное
представление
этого файла
с
использованием
автоматического
пропуска:
% xxd -a -c 12 file
0000000: 0000 0000 0000 0000 0000 0000 ............
*
000fffc: 0000 0000 40 ....A
Создать
1-байтный
файл,
содержащий
символ 'A'.
Число после '-r
-s'
добавляется
к номерам
строк,
найденным в
файле; иначе
говоря,
предшествующие
байты
пропускаются:
% echo '010000: 41' | xxd -r -s -0x10000 > file
xxd можно
использовать
в качестве
фильтра в
редакторе,
например в
vim(1), чтобы
создать
шестнадцатеричное
представление
области
между
отметками `a' и
`z':
:'a,'z!xxd
Вы можете
использовать
xxd в качестве
фильтра в
редакторе,
например в
vim(1), для
восстановления
данных из
шестнадцатеричного
представления
между
отметками `a' и
`z':
:'a,'z!xxd -r
Вы можете
использовать
xxd в качестве
фильтра в
редакторе,
например в
vim(1), для
восстановления
данных из
единственной
строки
шестнадцатеричного
представления.
Поместите
курсор в
соответствующую
строку и
наберите
!!xxd -r
Чтобы
прочитать
единственный
символ из
канала
связи:
% xxd -c1 < /dev/term/b &
% stty < /dev/term/b -echo -opost -isig -icanon min 1
% echo -n foo > /dev/term/b
ВОЗВРАЩАЕМЫЕ
ЗНАЧЕНИЯ¶
Программа xxd
завершает
работу со
следующими
значениями:
- 0
- Ошибки не
обнаружены.
- -1
- Операция
не
поддерживается
(выполнение
xxd -r -i пока
невозможно).
- 1
- Ошибка
при разборе
ключей
командной
строки.
- 2
- Проблемы
во входном
файле.
- 3
- Проблемы
в выходном
файле.
- 4,5
- Желательная
позиция
поиска
недостижима.
СМОТРИ
ТАКЖЕ¶
uuencode(1), uudecode(1), patch(1)
ПРЕДУПРЕЖДЕНИЕ¶
Странность
этой
программы
соответствует
особенностям
мозга её
создателя.
Используйте
её на свой
страх и риск.
Копируйте
файлы,
отслеживайте
вызовы,
становитесь
волшебником.
ВЕРСИЯ¶
Эта страница
справочника
документирует
xxd версии 1.7.
АВТОР¶
(c) 1990-1997 Юрген
Вайгерт (Juergen Weigert)
<jnweiger@informatik.uni-erlangen.de>
Вы можете
свободно
распространять
программу со
ссылкой на
меня.
Если
использование
этой
программы
принесло вам
какой-то
доход,
поделитесь
со мной.
Если вы
потеряли
деньги, то я
тут не
причём.
Первый
вариант
страницы
справочника
написан Тони
Наджентом (Tony Nugent)
<tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
Небольшие
изменения
внесены
Брамом
Мооленааром
(Bram Moolenaar). Страница
отредактирована
Юргеном
Вайгертом (Juergen
Weigert).