Команды сопровождения |
dd(1M) |
dd - преобразование и копирование файла
Команда dd копирует указанный входной файл в указанный выходной, совершая при необходимости преобразования. По умолчанию используются стандартный входной и стандартный выходной потоки. Можно задавать размеры блоков во входном и выходном файле, чтобы учесть особенности физического ввода-вывода. Размер блоков задается в байтах; значение размера может заканчиваться суффиксами k, b или w, задающими умножение на 1024, 512 и 2, соответственно. Числа можно также разделять символами x, интерпретируемыми как умножение.
Команда dd будет читать входной файл по одному блоку заданного размера; затем она обрабатывает данные, формируя выдаваемые блоки данных, которые могут быть меньше требуемого размера. Команда dd применяет любые заданные преобразования и записывает получившиеся данные в выходной файл блоками заданного для вывода размера.
Операнд cbs используется только если задано преобразование ascii, asciib, unblock, ebcdic, ebcdicb, ibm, ibmb или block. В первых двух случаях символы cbs копируются в буфер преобразования, выполняется любое указанное преобразование символов, хвостовые пробелы удаляются и перед посылкой строки в выходной файл добавляется символ новой строки. В последних трех случаях символы вплоть до символа новой строки считываются в буфер преобразования и дополняются пробелами для получения записи указанного размера. Предполагается, что файлы ASCII содержат символы новой строки. Если значение cbs не задано или равно 0, опции ascii, asciib, ebcdic, ebcdicb, ibm и ibmb преобразуют набор символов не изменяя структуру блоков входного файла; опции unblock и block приводят к простому копированию файла.
После завершения работы dd возвращает количество полных или частичных прочитанных и выданных блоков.
Поддерживаются следующие операнды:
if=файл | Задает входной файл; по умолчанию используется стандартный входной поток. | ||||||||||||
of=файл | Задает выходной файл; по умолчанию используется стандартный выходной поток. Если одновременно не задано преобразование seek=expr, выходной файл будет усекаться перед началом копирования, если только не указан операнд conv=notrunc. Если указан операнд seek=expr, но не указан conv=notrunc, в результате в выходном файле останутся только блоки, пропущенные командой dd. (Если размер пропускаемой части плюс размер входного файла меньше, чем прежний размер выходного файла, в результате копирования выходной файл станет меньше.) | ||||||||||||
ibs=n | Задает размер входного блока - n байтов (по умолчанию - 512). | ||||||||||||
obs=n | Задает размер выходного блока - n байтов (по умолчанию - 512). | ||||||||||||
bs=n | Устанавливает размеры входного и выходного блока равными n байтов, переопределяя установки ibs= и obs=. Если не указаны никакие изменения, кроме sync, noerror и notrunc, каждый входной блок будет непосредственно копироваться на выход, а не собираться из меньших блоков. | ||||||||||||
cbs=n |
Задает размер блока преобразования (n байтов, по умолчанию - 0) для
операндов block и unblock. Если операнд cbs= не указан
или задает значение 0, использование операндов block и unblock
дает неопределенные результаты.
Эта опция используется только если указано преобразование ASCII или EBCDIC. Для преобразований ascii и asciib входные данные обрабатываются так же, как и для операнда unblock, но символы преобразуются в ASCII перед удалением хвостовых пробелов. Для преобразований ebcdic, ebcdicb, ibm и ibmb входные данные обрабатываются так же, как и для операнда block, но символы преобразуются в EBCDIC или IBM EBCDIC после добавления хвостовых пробелов. | ||||||||||||
files=n | Копирует и конкатенирует n входных файлов, прежде чем завершить работу (имеет смысл только если входные данные берутся с ленты или другого аналогичного устройства). | ||||||||||||
skip=n | Пропускает n входных блоков (используя указанный размер блока) перед началом копирования. Если по файлу можно перемещаться, реализация dd прочитает или просто пропусти блоки; если же перемещаться по файлу нельзя, блоки будут прочитаны и проигнорированы. | ||||||||||||
iseek=n | Перемещается на n блоков с начала входного файла перед копированием (походит для файлов на диске, где skip может работать весьма медленно). | ||||||||||||
oseek=n | Перемещается на n блоков от начала выходного файла перед копированием. | ||||||||||||
seek=n | Пропускает n блоков (используя заданный размер выходного блока) с начала выходного файла перед копированием. Если по файлу нельзя перемещаться, существующие блоки будут прочитаны, а пространство от текущего конца файла до указанного смещения (если смещение задано) будет заполненно нулевыми байтами; если же по файлу можно перемещаться, реализация dd пропустит данные вплоть до указанного смещения или прочитает блоки так, как описано выше. | ||||||||||||
count=n | Копирует только n входных блоков. | ||||||||||||
conv=значение[,значение...] |
Здесь значения берутся из следующего списка:
| ||||||||||||
block | Рассматривает входной файл как последовательность записей переменной длины, завершаемых символами новой строки или символом конца файла (EOF), независимо от размера входного блока. Каждая запись преобразуется в запись фиксированной длины, задаваемой размером блока преобразования. Все символы новой строки из входной строки удаляются; к строкам при необходимости добавляются пробелы, чтобы заполнить блок. Строки, длина которых превышает размер блока преобразования, усекаются до этого размера; утилита сообщает о количестве усеченных строк. | ||||||||||||
unblock | Преобразует записи фиксированной длины в записи переменной длины. Читает количество байтов, равное размеру блока преобразования (или оставшиеся байты входного файла, если их меньше, чем байтов в блоке преобразования), удаляет все хвостовые пробелы и добавляет символ новой строки. | ||||||||||||
Значения block и unblock - взаимоисключающие. | |||||||||||||
lcase | Преобразует все символы верхнего регистра, в соответствии со значением LC_CTYPE, в нижний регистр. Символы, для которых преобразование в локали не задано, не изменяются. | ||||||||||||
ucase | Преобразует все символы нижнего регистра, в соответствии со значением LC_CTYPE, в верхний регистр. Символы, для которых преобразование в локали не задано, не изменяются.|||||||||||||
Значения lcase и ucase - взаимоисключающие. | |||||||||||||
swab | Переставляет байты в каждой входной паре. Если в текущей входной записи нечетное количество байтов, последний байт игнорируется. | ||||||||||||
noerror | Не останавливать обработку в случае ошибки чтения. При возникновении ошибки чтения в стандартный поток ошибок выдается диагностическое сообщение, а затем - текущий входной и выходной блок в том же формате, что и при завершении работы. Если задано преобразование sync, недостающие входные данные будут заменены нулевыми байтами; в противном случае, сбойный входной блок просто не попадает в выходной файл. | ||||||||||||
notrunc | Не усекать выходной файл. Сохраняет блоки выходного файла, не перезаписываемые явно при этом вызове dd. (См. также предшествующий операнд of=файл.) | ||||||||||||
sync | Дополнять каждый входной блок до размера буфера, задаваемого операндом ibs=, добавляя нулевые байты. (Если указан также операнд block или unblock, добавляются пробелы, а не нулевые байты.) |
Если операнды (кроме conv=) указаны более одного раза, будет использоваться значение из последней пары операнд=значение.
Для операндов bs=, cbs=, ibs= и obs= необходимо указать выражение, задающее размер в байтах. Это выражение может быть:
Все операнды обрабатываются до начала чтения входных данных.
Описание работы утилиты dd с файлами, рамер которых превосходит 2 Гбайта (2**31 байтов) см. на странице справочного руководства largefile(5).
В следующем примере выполняется копирование со стримера 0 на стример 1 с использованием стандартных имен соответствующих устройств.
example% dd if=/dev/rmt/0h of=/dev/rmt/1hВ следующем примере удаляются первые 10 байтов стандартного входного потока.
example% dd ibs=10 skip=1В следующем примере читается лента с данными в кодировке EBCDIC, сблокированными по десять 80-байтовых образов, в ASCII-файл x:
example% dd if=/dev/tape of=x ibs=800 cbs=80 conv=ascii,lcaseВ следующем примере используется синхронизация (conv=sync) при записи на ленту:
example% tar cvf - . | compress | dd obs=1024k of=/dev/rmt/0 conv=syncОписание переменных среды LC_CTYPE, LC_MESSAGES и NLSPATH, влияющих на работу dd, см. на странице справочного руководства environ(5).
Программа завершается со следующими значениями статуса выхода:
0 | Входной файл успешно скопирован. |
>0 | Произошла ошибка. |
Если при чтении произошла ошибка и не указано преобразование noerror, частично сформированный выходной блок будет записан в выходной файл, будет выдано диагностическое сообщение и копирование будет прекращено. При возникновении любой другой ошибки будет выдано диагностическое сообщение и копирование будет прекращено.
Описание следующих атрибутов см. на странице справочного руководства attributes(5):
ТИП АТРИБУТА | ЗНАЧЕНИЕ АТРИБУТА |
Доступен в пакете | SUNWcsu |
Не используйте dd для копирования файлов из одной файловой системы в другую, если в этих файловых системах разные размеры блоков.
При использовании блочного устройства для копирования файлов последний блок будет дополнен нулевыми байтами до границы блока.
Когда утилита dd читает из программного канала и заданы операнды ibs=X и obs=Y, результат будет всегда организован в блоки размера Y. Если используется операнд bs=Z, выходные блоки всегда имеют такой размер, как прочитанные из входного потока.
При использовании dd для копирования файлов на ленту, размер файла должен быть кратным размеру сектора на устройстве (например, 512 байтов). Для копирования на ленту файлов произвольного размера используйте команды tar(1) или cpio(1).
При получении сигнала SIGINT команда dd перед завершением работы выдаст информацию о состоянии в стандартный поток ошибок. Для остальных сигналов используются стандартные обработчики.
Copyright 2002 В. Кравчук, OpenXS Initiative, перевод на русский язык
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |