Linux – Why do we use cp to copy files and not dd? (in unix-derivatives)


For normal file copying in *nix, I've only ever seen people use cp (eg. cp /mnt/mydevice/myfile ~/myfile), but I eventually ran into dd, which appears to do the exact same thing (dd if=/mnt/mydevice/myfile of=~/myfile). I do see that they have some different parameters available (dd seems better at fine-tuned copying), but they appear redundant. Do these tools really do the same thing?

Best Answer

To answer your main question, no, they do not do the same thing.

dd works on the file you specify, making it able to copy data between devices, or from a device to a file. This is commonly used for moving data if devices specifically are involved (create an iso image from a cd-rom disc for example: dd if=/dev/cdrom of=mycdrom.iso), or backup raw devices (sometimes used in RAC databases: dd if=/dev/raw/raw1 of=device_raw1)

cp is used for duplicating file content to a new file or to a new location. things you specifically want there are preservation of ownership, timestamp and mode (rights), and being able to recurse the operation (=being able to copy directories).