¿Por qué usamos cp para copiar archivos y no dd? (en derivados unix)

21

Para la copia de archivos normal en * nix, solo he visto a personas usar cp (por ejemplo cp /mnt/mydevice/myfile ~/myfile), pero finalmente me encontré con lo ddque parece hacer exactamente lo mismo ( dd if=/mnt/mydevice/myfile of=~/myfile). Veo que tienen algunos parámetros diferentes disponibles (dd parece mejor en la copia ajustada), pero parecen redundantes. ¿Estas herramientas realmente hacen lo mismo?

user232105
fuente
Hacen lo mismo solo para archivos normales. Intente, por ejemplo, copiar un directorio con dd.
Eddy_Em
... o un dispositivo (como /dev/sda) con cp.
jpaugh
¿Tu pregunta fue respondida?
Kruug
@Eddy_Em, ¿Qué hay de malo en eso?
Pacerier

Respuestas:

13

Para responder a su pregunta principal, no, no hacen lo mismo.

dd funciona en el archivo que especifique, lo que permite copiar datos entre dispositivos o desde un dispositivo a un archivo. Esto se usa comúnmente para mover datos si los dispositivos están específicamente involucrados (cree una imagen iso de un disco cd-rom, por ejemplo: dd if = / dev / cdrom of = mycdrom.iso), o dispositivos sin respaldo de respaldo (a veces utilizados en bases de datos RAC : dd if = / dev / raw / raw1 of = device_raw1)

cp se usa para duplicar el contenido del archivo en un nuevo archivo o en una nueva ubicación. Las cosas que desea específicamente allí son la preservación de la propiedad, la marca de tiempo y el modo (derechos), y la posibilidad de repetir la operación (= poder copiar directorios).

Fuente

Kruug
fuente
3
Ah! Bien, entonces dd copia el archivo sin formato, mientras que cp copia el contenido (lo que le permite, por ejemplo, copiar directorios sin romper el sistema de archivos). ¡Gracias!
user232105
55
@Kruug, debo estar perdiendo algo porque todavía no veo qué cppuede hacer que ddno pueda. ddtambién es capaz de "duplicar el contenido del archivo en un nuevo archivo o en una nueva ubicación" y "preservar la propiedad, la marca de tiempo y el modo", ¿verdad?
Pacerier
3
@Pacerier, por lo que puedo entender, cpes una utilidad más centrada, mientras que ddes más general. ddpuede hacer todo lo que cppuede hacer, pero cpsolo puede hacer algo de lo que ddpuede hacer.
Kruug
No creo que la diferencia se explique claramente suficiente. ¿Qué cp no puede hacer y dd puede? ¿Y al revés?
Gorn
9

Hacen lo mismo A MENOS QUE esté especificando una de las opciones a las ddque limita los bytes que se copian, como seeko skipo counto si usa las ddopciones para mutar bytes como conv. Si no está utilizando una de estas opciones ddy solo está utilizando las opciones más comunes como if, entonces of, bsambas utilidades hacen lo mismo: abrir ambos archivos, leer desde la entrada, escribir en la salida hasta que la entrada se agote o la salida no puede aceptar más bytes.

Hay mucha superstición acerca de la lectura y escritura de archivos de "dispositivos" que indican que debe usar ddpara estos, pero es solo eso, superstición. ddno está haciendo nada diferente, solo estamos abriendo archivos y leyendo y escribiendo bytes.

estofado
fuente
Más o menos esto ... si usa = destiny dependiendo del dispositivo que sea, pueden ocurrir algunos problemas, ej. Disco flash USB. Descubro que tengo que usar >> destiny y eliminar el parámetro = xxx para que funcione. Si uso de = destiny ocurren problemas extraños porque opero con skip y iflags = skip_bytes flag ... así que no hay demasiada superstición. Necesita cuidados y pruebas debido a que = el destino puede no funcionar correctamente en algunas condiciones donde >> el destino se realiza sin problemas. Escribí un script para guardar un archivo grande para que pendrive con pasos. Copia completa de 400 MB utilizada para ensuciar la partición del disco sdcard
Sergio Abreu