XXD(1) | General Commands Manual | XXD(1) |
НАЗНАЧЕНИЕ
Программа 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). Аргументы командной строки -p, -i в этом режиме не применяются.
- -c кол | -cols кол
- Задаёт количество октетов <кол>, которое выводится на каждой строке. По умолчанию используется значение 16 (для аргумента -i используется 12, для -ps — 30, для -b — 6). Максимально допустимое значение — 256. Максимальное значение не применяется с аргументом -ps. Если с аргументом -ps, указано значение 0, то будет выведена просто одна длинная строка.
- -C | -capitalize
- Преобразовать наименования переменных в верхний регистр при использовании стиля отображения в виде подключаемых файлов языка Си, который включается через аргумент командной строки -i.
- -d
- Отображать смещение не в шестнадцатеричном, а в десятичном формате.
- -E | -EBCDIC
- Отображать символы в крайне правой колонке не в кодировке ASCII, а в кодировке EBCDIC. Этот аргумент не влияет на шестнадцатеричное представление данных. Данный аргумент не имеет смысла, если используются аргументы командной строки -r, -p или -i.
- -e
- Использовать обратный порядок байт при отображение шестнадцатеричного представления данных. Группа байт будет показана как двоичное слово от младших разрядов к старшим. Используемое по умолчанию группирование по четыре байта может быть изменено через аргумент командной строки -g. Действие этого аргумента распространяется только на шестнадцатеричное представление данных и не оказывает влияние на символьное представление в кодировке ASCII (или EBCDIC). Аргументы командной строки -r, -p, -i не применяются в этом режиме.
- -g байт | -groupsize байт
- Выполнить группирование указанного количества <байт> (две шестнадцатеричные цифры или восемь двоичных цифр), отделяя группы друг от друга пробелами. Значение -g 0 применяется для отказа от использования группирования. По умолчанию используется значение <байт>, равное 2 при отображении в прямом порядке байт, 4 при отображении в обратном порядке байт и 1 в двоичном режиме. Группировка не применяется в режиме PostScript или include.
- -h | -help
- Показать краткую информацию об аргументах командной строки и завершить работу программы. Создание шестнадцатеричного представления не выполняется.
- -i | -include
- Создавать вывод в стиле подключаемых заголовочных файлов языка Си. Вывод содержит полноценное определение статического массива данных, название которого соответствует наименованию входного файла, если программа xxd не считывает данные из стандартного потока ввода.
- -l длина | -len длина
- Указывает, что после записи заданного в параметре <длина> количества октетов, работа программы будет завершена.
- -n название | -name название
- Изменить возвращаемое наименование переменной при использовании аргумента -i. Применяется к массиву байт, который будет именоваться как название и длина файла как название_len.
- -o смещение
- Указывает добавить <смещение> в отображаемую позицию файла.
- -p | -ps | -postscript | -plain
- Использовать непрерывный формата вывода шестнадцатеричного кода, известного как "простой" стиль или стиль "PostScript".
- -r | -revert
- Выполнить операцию обратного преобразования, т. е. преобразование шестнадцатеричного представления в двоичный код (или применить результат в качестве исправления). Если вывод происходит не в стандартного поток вывода, то программа xxd выполняет добавление кода к выходному файлу. При использовании комбинации аргументов -r -p происходит чтение "простого" шестнадцатеричного представления без использования информации о номерах строк и какого-либо специального распределения колонок. Пробелы и символы новой строки могут встречаться в любом месте исходных данных. При использовании комбинации аргументов -r -b будет происходить считывание двоичного представления вместо шестнадцатеричного.
- -R когда
- В выходных данных одни и те же шестнадцатеричные значения и строковые значения будут подсвечиваться одним и тем же цветом. В основном это помогает различать печатаемые и непечатаемые символы. Где когда может принимать значение never (никогда), always (всегда), или auto (автовыбор, по умолчанию). Если установлена переменная окружения $NO_COLOR , то цветовая подсветка будет отключена.
- -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 байт)
файла :
% xxd -s 0x30 file
Вывести
три строки
(0x30 байт) от
конца
файла :
% xxd -s -0x30 file
Вывести 120
байт в виде
непрерывного
шестнадцатеричного
представления
по 20 октетов
в строке
(этот
пример для
справочника
xxd.1 на
английском
языке, для
русского
языка
будет
немного
другой
результат):
% xxd -l 120 -ps -c 20 xxd.1
2e544820585844203120224d6179203230323422
20224d616e75616c207061676520666f72207878
64220a2e5c220a2e5c222032317374204d617920
313939360a2e5c22204d616e2070616765206175
74686f723a0a2e5c2220202020546f6e79204e75
67656e74203c746f6e79407363746e7567656e2e
Вывести
первые 120
байт этого
справочника
по 12 октетов
в строке
(этот
пример для
справочника
xxd.1 на
английском
языке, для
русского
языка
будет
немного
другой
результат):
% xxd -l 120 -c 12 xxd.1
00000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 "M
0000000c: 6179 2032 3032 3422 2022 4d61 ay 2024" "Ma
00000018: 6e75 616c 2070 6167 6520 666f nual page fo
00000024: 7220 7878 6422 0a2e 5c22 0a2e r xxd"..\"..
00000030: 5c22 2032 3173 7420 4d61 7920 \" 21st May
0000003c: 3139 3936 0a2e 5c22 204d 616e 1996..\" Man
00000048: 2070 6167 6520 6175 7468 6f72 page author
00000054: 3a0a 2e5c 2220 2020 2054 6f6e :..\" Ton
00000060: 7920 4e75 6765 6e74 203c 746f y Nugent <to
0000006c: 6e79 4073 6374 6e75 6765 6e2e ny@sctnugen.
Показать
дату из
файла xxd.1
(этот
пример для
справочника
xxd.1 на
английском
языке, для
русского
языка
будет
немного
другая
команда,
например,
для UTF-8 — xxd -s 0x50 -l 13 -c 13 xxd.1):
% xxd -s 0x33 -l 13 -c 13 xxd.1
00000033: 3231 7374 204d 6179 2031 3939 36 21st May 1996
Скопировать
входной_файл
в
выходной_файл
с
добавлением
100 байт со
значением
0x00 в начало
файла:
% xxd
входной_файл
| xxd -r -s 100 >
выходной_файл
Заменить
дату в
файле xxd.1
(этот
пример для
справочника
xxd.1 на
английском
языке, для
русского
языка
будут
немного
другие
команды):
% echo "0000034: 3574 68" | xxd -r - xxd.1
% xxd -s 0x33 -l 13 -c 13 xxd.1
00000033: 3235 7468 204d 6179 2031 3939 36 25th May 1996
Создать 65537-байтный файл, все байты которого имеют значение 0x00, кроме последнего байта, который должен иметь значение 'A' (0x41):
% echo "010000: 41" | xxd -r > file
Создать шестнадцатеричное представление этого файла с использованием автоматического пропуска:
% xxd -a -c 12 file
00000000: 0000 0000 0000 0000 0000 0000 ............
*
0000fffc: 0000 0000 41 ....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 от 2024-05.
АВТОР
(c) Юрген
Вайгерт (Juergen Weigert),
1990-1997
<jnweiger@informatik.uni-erlangen.de>
Вы можете
свободно
распространять
программу
со ссылкой
на меня.
Если
использование
этой
программы
принесло
вам
какой-то
доход,
поделитесь
со мной.
Если вы
потеряли
деньги, то я
тут ни при
чём.
Первый
вариант
справочника
написан
Тони
Наджентом
(Tony Nugent)
<tony@sctnugen.ppp.gu.edu.au> <T.Nugent@sct.gu.edu.au>
Небольшие
изменения
внесены
Брамом
Моленаром
(Bram Moolenaar).
Справочник
отредактирован
Юргеном
Вайгертом
(Juergen Weigert).
May 2024 | Справочник по программе xxd |