Сторінка не перевірена
dd (англ.dataset definition — визначення набору даних) —команда Unix, призначена для низькорівневогокопіювання й конвертації необроблених (raw) даних. Використовується для копіювання визначеної кількості байтів чи блоків, заміни порядку байтів "на льоту", копіювання областей файлів пристроїв, резервного копіювання завантажувального сектора жорсткого диску або читання фіксованої кількості даних зі спеціальних файлів/dev/zero чи/dev/random.
Командуdd жартома називають «винищувач дисків» (disk destroyer), «винищувач даних» (data destroyer), чи «стерти дані» (delete data), оскільки при виконанні низькорівневих операцій навіть незначна помилка (така, як переплутати між собою параметриif таof) може призвести до втрати деяких (або навіть усіх) даних на диску.
Синтаксис командиdd істотно відрізняється в залежності відОС, тому узагальнити опис використання непросто. Загалом,dd використовує форматoption=value, тоді як більшість Unix-команд мають вигляд-option value або--option=value. Такожdd використовує параметриif для задання вхідного файлу (тоді як більшість команд безпосередньо приймають ім'я файлу) таof — для файлу виводу.
Команда має таку загальну форму (квадратні дужки[…] значать, що параметр — необов'язковий):
dd [--help] [--version] [if=файл] [of=файл] [bs=байтів] [ibs=байтів] [obs=байтів] [cbs=байтів] [count=блоків] [seek=блоків] [skip=блоків] [conv={ascii, ebcdic, ibm, block, unblock, lcase, ucase, swab, noerror, notrunc, sync}]
Кількістьблоків ібайтів може бути вказана за допомогою суфіксів множення:c =1,w =2,b =512,kB =1000,K =1024,MB =1000*1000,M =1024*1024,xM =MGB =1000*1000*1000,G =1024*1024*1024, те ж саме дляT,P,E,Z,Y.
Приклад використання командиdd для створенняобразу диску з CD-ROM:
ddif=/dev/cdromof=/home/sam/myCD.isobs=2048conv=sync
Створитиобраз CD/DVD, використовуючи розмір блоку, ігноруючи помилки:
ddif=/dev/cdromof=backup.isobs=65535conv=noerror
ЗаписатиISO-образ «image.iso» на розділ sdb1 разом із йогозавантажувальним сектором і форматуванням розділу вфайловій системі образа (як правило,ISO 9660 абоUDF):
ddif=image.isoof=/dev/sdb1
Скопіювати файл foo в файл bar:
ddif=fooof=bar
Скопіювати файл foo в файл bar, пропустивши перші 10 КБ із файлу foo:
ddif=fooof=barbs=1kskip=10
Порізати 10-мегабайтний файл foo на два по 5 МБ:
ddif=fooof=bar.0bs=1Mcount=5ddif=fooof=bar.1bs=1Mskip=5
Склеїти чотири 100-мегабайтних файли в один:
ddif=SMILE.001of=SMILEbs=1Mseek=0ddif=SMILE.002of=SMILEbs=1Mseek=100ddif=SMILE.003of=SMILEbs=1Mseek=200ddif=SMILE.004of=SMILEbs=1Mseek=300
а можна й так:
ddif=SMILE.001>SMILEddif=SMILE.002>>SMILEddif=SMILE.003>>SMILEddif=SMILE.004>>SMILE
або ж (для склеювання файлу із великої кількості шматків):
foriin{1..4};doddif=SMILE.00$i>>SMILEdone
Приклади вище показують можливості dd; на практиці, зазвичай, використовуєтьсяcat:
catSMILE.00{1,2,3,4}>>SMILE
або простіше, якщо немає зайвих файлів, що підпадають під маскуSMILE.*:
catSMILE.*>SMILE
Вивести на екран (у /dev/stdout) перші 256 байт файла foo:
ddif=fooof=/dev/stdoutbs=128count=2
або, враховуючи, що типовий файл виводу якраз і є/dev/stdout:
ddif=foobs=128count=2
Попередня команда придатна лише для перегляду текстового файлу. Вміст бінарного файлу рекомендується дивитися, перенаправивши вивід на командуhexdump:
ddif=foobs=1count=102>/dev/null|hexdump
Скопіювати один розділ жорсткого диску на інший жорсткий диск, ігноруючи помилки вводу-виводу:
ddif=/dev/sda1of=/dev/sdb2bs=4096conv=noerror
Зробити копіюголовного завантажувального запису (MBR) першого жорсткого диску:
ddif=/dev/hdaof=bootloader.mbrbs=1count=512
Копіювати все, крім мітки, з диску на магнітну стрічку:
(ddbs=4kskip=1count=0&&ddbs=512k)<$disk>$tape
Копіювати все, не перезаписуючи мітку, з магнітної стрічки на диск:
(ddbs=4kseek=1count=0&&ddbs=512k)<$tape>$disk
Знищити вміст пристрою/dev/sdg, заповнивши його «нулями» з/dev/zero:
ddif=/dev/zeroof=/dev/sdgbs=65535
Дізнатися статус виконання операції:
killall-USR1dd
В останніх версіях статус виконання операції можна відобразити в консолі, ввівши команду dd з параметром status=progress
dd if=image.iso of=/dev/sdb status=progress