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 являются равнозначными.
При указании команды 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 возвращает следующие значения:
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 |