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