Provided by:
vim-common_7.2.245-2ubuntu2_i386 
ИМЯ
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).