Por que usamos o cp para copiar arquivos e não o dd? (em derivativos unix)

21

Para a cópia normal de arquivos no * nix, só vi pessoas usarem cp (por exemplo cp /mnt/mydevice/myfile ~/myfile), mas acabei encontrando o ddque parece fazer exatamente a mesma coisa ( dd if=/mnt/mydevice/myfile of=~/myfile). Eu vejo que eles têm alguns parâmetros diferentes disponíveis (o dd parece melhor na cópia ajustada), mas eles parecem redundantes. Essas ferramentas realmente fazem a mesma coisa?

user232105
fonte
Eles fazem o mesmo apenas para arquivos regulares. Tente, por exemplo, copiar um diretório com dd.
Eddy_Em 18/06/2013
... ou um dispositivo (como /dev/sda) com cp.
jpaugh
Sua pergunta foi respondida?
Kruug
@ Eddy_Em, o que há de errado nisso?
Pacerier

Respostas:

13

Para responder à sua pergunta principal, não, eles não fazem a mesma coisa.

O dd funciona no arquivo especificado, permitindo copiar dados entre dispositivos ou de um dispositivo para um arquivo. Isso é comumente usado para mover dados se dispositivos estiverem envolvidos especificamente (crie uma imagem ISO a partir de um CD-ROM, por exemplo: dd if = / dev / cdrom de = mycdrom.iso) ou faça backup de dispositivos brutos (às vezes usados ​​em bancos de dados RAC : dd se = / dev / raw / raw1 de = device_raw1)

cp é usado para duplicar o conteúdo do arquivo em um novo arquivo ou em um novo local. o que você deseja especificamente é a preservação da propriedade, o carimbo de data e hora e o modo (direitos) e poder recursar a operação (= poder copiar diretórios).

Fonte

Kruug
fonte
3
Ah! Ok, então o dd copia o arquivo bruto, enquanto o cp copia o conteúdo (o que permite, por exemplo, copiar diretórios sem interromper o sistema de arquivos). Obrigado!
user232105
5
@ Kruug, devo estar faltando alguma coisa, porque ainda não vejo o que cppode fazer isso ddnão pode. ddtambém é capaz de "duplicar o conteúdo do arquivo para um novo arquivo ou para um novo local" e "preservação da propriedade, carimbo de data e hora e modo", certo?
Pacerier
3
O @Pacerier, pelo que entendi, cpé um utilitário mais focado, ao passo que ddé mais geral. ddpode fazer tudo o que cppode fazer, mas cpsó pode fazer parte do que ddpode fazer.
Kruug 5/05
Não acho que a diferença seja explicada claramente. O que cp não pode fazer e dd pode? E o contrário?
Gorn
9

Eles fazem o mesmo, a menos que você esteja especificando uma das opções para as ddquais limites de bytes são copiados, como seekou skipou countou se você usar as ddopções para alterar bytes como conv. Se você não estiver usando uma destas opções para dde estão apenas usando as opções mais comumente visto como if, of, bsem seguida, ambos os utilitários fazer a mesma coisa: abrir os dois arquivos, leia a partir da entrada, escreva para a saída até que a entrada está esgotado ou a saída não pode aceitar mais bytes.

Há muita superstição sobre a leitura e gravação de arquivos "dispositivos", afirmando que você deve usar ddpara isso, mas é apenas isso, superstição. ddnão está fazendo nada diferente, estamos apenas abrindo arquivos e lendo e escrevendo bytes.

Estufado
fonte
Mais ou menos isso ... se você usar = destino dependendo do dispositivo, alguns problemas podem ocorrer, por exemplo. Disco flash usb. Descobri que tenho que usar >> destiny e remover o parâmetro = xxx para que ele funcione. Se eu usar of = destination, ocorrerão problemas estranhos porque opero com a flag skip e iflags = skip_bytes ... então, não há muita superstição. Precisa de cuidados e testes por causa de = destino pode não funcionar corretamente em algumas condições em que >> o destino é tranquilo. Eu escrevi um script para salvar arquivos grandes para pendrive com etapas. Cópia completa de 400 MB usada para alterar a partição do disco sdcard.
Sergio Abreu