dd — программа Unix предназначенная для копирования и конвертации файлов.

ВведениеПравить

Поскольку в Unix очень многие объекты являются файлами, спектр применения dd гораздо более широк, чем кажется на первый взгляд. Регулярно возникает необходимость не просто скопировать файл или несколько файлов (с чем прекрасно справляется cp), но скопировать первые n байт файла, пропустить m байт от начала, прочитать файл с дефектного носителя, транслировать содержимое файла в ASCII, «развернуть» порядок байт в файле (Little-Endian vs. Big-Endian), просто скопировать очень большой файл или все вместе взятое. Для этой цели и служит dd.

Некоторые параметрыПравить

Базовые параметрыПравить

  • if=файл - читает данные из файла вместо стандартного ввода.
  • of=файл - пишет данные в файл вместо стандартного вывода.
  • bs=n — размер блока
  • ibs=nn и obs=nn — задает, сколько байтов нужно считывать или записывать за раз
  • count=n — сколько блоков скопировать
  • skip=n — сколько блоков от начала файла пропустить перед началом копирования
  • conv=фильтр,фильтр — применить фильтры конвертациии.

ФильтрыПравить

  • ascii — сконвертировать в ASCII из EBCDIC
  • ebcdic — … и наоборот
  • block — выравнивание блоков
  • lcase — преобразовать к нижнему регистру
  • ucase — преобразовать к верхнему регистру
  • swab — менять местами пары байт
  • noerror — игнорировать ошибки ввода-вывода.

Примеры использованияПравить

  • dd if=foo of=bar
    • скопировать файл foo в файл bar
  • dd if=foo of=/dev/stout bs=128 count=2
    • вывести на экран (в /dev/stdout) первые 256 байт файла foo
  • dd if=/dev/cdrom of=backup.iso bs=65535 conv=noerror
    • сделать image компакт-диска, используя большой размер блока. Игнорировать ошибки.
  • dd if=/dev/zero of=/dev/sdg bs=65535
    • уничтожить содержимое устройства /dev/sdg, заполнив его «нулями» из /dev/zero
  • dd if=/dev/hda of=bootloader.mbr bs=512 count=1
    • сделать копию главной загрузочной записи первого жесткого диска
  • (dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape
    • Копировать все, кроме метки, с диска на ленту
  • (dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk
    • Копировать все, не перезаписывая метку, с ленты на диск

См. такжеПравить

При написании статьи были использованы материалы man dd, описывающие версию dd от GNU. Версии dd на других операционных системах могут отличаться от вышеописанной.