Почему мы используем cp для копирования файлов, а не dd? (в unix-производных)

21

Для обычного копирования файлов в * nix я когда-либо видел, чтобы люди использовали cp (например, cp /mnt/mydevice/myfile ~/myfile), но я в итоге столкнулся dd, что, похоже, делает то же самое ( dd if=/mnt/mydevice/myfile of=~/myfile). Я вижу, что у них есть несколько различных доступных параметров (dd кажется лучше при точном копировании), но они кажутся избыточными. Эти инструменты действительно делают то же самое?

user232105
источник
Они делают то же самое только для обычных файлов. Попробуйте, например, скопировать каталог с dd.
Eddy_Em
... или устройство (как /dev/sda) с cp.
jpaugh
На ваш вопрос ответили?
Крууг
@ Eddy_Em, что не так с этим?
Pacerier

Ответы:

13

Чтобы ответить на ваш главный вопрос, нет, они не делают то же самое.

dd работает с указанным вами файлом, что позволяет копировать данные между устройствами или с устройства в файл. Это обычно используется для перемещения данных, если специально задействованы устройства (например, создайте ISO-образ с диска CD-ROM: dd if = / dev / cdrom of = mycdrom.iso) или для резервного копирования необработанных устройств (иногда используется в базах данных RAC). : dd if = / dev / raw / raw1 of = device_raw1)

cp используется для дублирования содержимого файла в новый файл или в новое место. вещи, которые вам особенно нужны, - это сохранение владельца, метка времени и режим (права), а также возможность повторения операции (= возможность копирования каталогов).

Источник

Kruug
источник
3
Ах! Итак, dd копирует сырой файл, тогда как cp копирует содержимое (что позволяет, например, копировать каталоги, не нарушая файловую систему). Благодарность!
user232105
5
@ Крууг, я, должно быть, что-то упустил, потому что я до сих пор не вижу, что cpможно сделать, чего ddне может ddтакже может "дублировать содержимое файла в новый файл или в новое место" и "сохранение владельца, метки времени и режима", верно?
Pacerier
3
@Pacerier, насколько я могу понять, cp- это более сфокусированная утилита, тогда как она ddносит более общий характер. ddможет делать все, что cpможет, но cpможет делать только то, что ddумеет.
Крууг
Я не думаю, что разница объясняется достаточно четко. Что cp не может сделать и dd может? И наоборот?
Гор
9

Они делают то же самое , если вы не указываете один из вариантов , ddкоторые пределы , которые копируются байт, например, seekили , skipили , countили , если вы используете ddопции мутировать байтов , таких как conv. Если вы не используете один из этих вариантов для ddи только с помощью более часто видели варианты , как if, of, bsто обе утилиты делают то же самое: открыть оба файла, считываются из входных данных, запись на выходе до тех пор , как вход не будет исчерпан или вывод не может принять больше байтов.

Существует много суеверий о чтении и записи файлов «устройств», в которых говорится, что вы должны использовать ddих, но это просто суеверие. ddничего другого не делаем, мы просто открываем файлы, читаем и пишем байты.

тушеное мясо
источник
Более или менее это ... если вы используете = судьбу в зависимости от устройства, некоторые проблемы могут возникнуть, например. Флешка Я обнаружил, что должен использовать >> destiny и удалить параметр = xxx, чтобы он работал. Если я использую = судьбу, возникают странные проблемы, потому что я оперирую с пропуском и флагом iflags = skip_bytes ... так что, не так много суеверий. Требуется забота и тесты из-за = судьба может работать неправильно в некоторых условиях, когда >> судьба идет гладко. Я написал скрипт для сохранения большого файла, чтобы pendrive с шагами. Полная копия 400 МБ используется, чтобы испортить раздел диска SDCard.
Серхио Абреу