Pourquoi utilisons-nous cp pour copier des fichiers et non dd? (en dérivés unix)

21

Pour la copie de fichiers normale dans * nix, je n'ai vu que des gens utiliser cp (par exemple cp /mnt/mydevice/myfile ~/myfile), mais j'ai finalement rencontré dd, ce qui semble faire exactement la même chose ( dd if=/mnt/mydevice/myfile of=~/myfile). Je vois qu'ils ont différents paramètres disponibles (dd semble mieux pour la copie affinée), mais ils semblent redondants. Ces outils font-ils vraiment la même chose?

user232105
la source
Ils font les mêmes choses que pour les fichiers normaux. Essayez par exemple de copier un répertoire avec dd.
Eddy_Em
... ou un appareil (comme /dev/sda) avec cp.
jpaugh
A-t-on répondu à votre question?
Kruug
@Eddy_Em, qu'est-ce qui ne va pas avec ça?
Pacerier

Réponses:

13

Pour répondre à votre question principale, non, ils ne font pas la même chose.

dd fonctionne sur le fichier que vous spécifiez, ce qui lui permet de copier des données entre des périphériques ou d'un périphérique vers un fichier. Ceci est couramment utilisé pour déplacer des données si des périphériques sont spécifiquement impliqués (créer une image iso à partir d'un disque cd-rom par exemple: dd if = / dev / cdrom of = mycdrom.iso), ou sauvegarder des périphériques bruts (parfois utilisés dans les bases de données RAC : dd if = / dev / raw / raw1 of = device_raw1)

cp est utilisé pour dupliquer le contenu d'un fichier vers un nouveau fichier ou vers un nouvel emplacement. ce que vous voulez spécifiquement, c'est la préservation de la propriété, de l'horodatage et du mode (droits), et la possibilité de répéter l'opération (= pouvoir copier des répertoires).

La source

Kruug
la source
3
Ah! D'accord, donc dd copie le fichier brut, tandis que cp copie le contenu (ce qui lui permet par exemple de copier des répertoires sans casser le système de fichiers). Merci!
user232105
5
@Kruug, je dois manquer quelque chose parce que je ne vois toujours pas ce qui cppeut le faire dd. ddest également capable de "dupliquer le contenu d'un fichier vers un nouveau fichier ou vers un nouvel emplacement" et "préserver la propriété, l'horodatage et le mode", n'est-ce pas?
Pacerier
3
@Pacerier d'après ce que je peux comprendre, cpest un utilitaire plus ciblé alors qu'il ddest plus général. ddpeut faire tout ce qui cppeut être fait, mais cpne peut faire qu'une partie de ce qui ddpeut faire.
Kruug
Je ne pense pas que la différence s'explique clairement. Qu'est-ce que cp ne peut pas faire et dd peut? Et l'inverse?
gorn
9

Ils font la même chose À MOINS QUE vous ne spécifiiez l'une des options dans ddlesquelles les octets sont copiés, tels que seekou skipou countou si vous utilisez les ddoptions pour muter des octets tels que conv. Si vous n'utilisez pas une de ces options à ddet utilisez seulement les options les plus fréquemment observées comme if, of, bspuis les deux services font la même chose: ouvrir les deux fichiers, lecture de l'entrée, écriture à la sortie jusqu'à ce que l'entrée soit épuisé ou la sortie ne peut pas accepter plus d'octets.

Il y a beaucoup de superstitions à propos de la lecture et de l'écriture de fichiers «périphériques» indiquant que vous devez les utiliser dd, mais c'est juste cela, la superstition. ddne fait rien de différent, nous ouvrons simplement des fichiers et lisons et écrivons des octets.

Ragoût
la source
Plus ou moins cela ... si vous utilisez = destiny selon l'appareil qu'il est, certains problèmes peuvent survenir, ex. Disque flash USB. Je découvre que je dois utiliser >> Destiny et supprimer le paramètre = xxx pour que cela fonctionne. Si j'utilise of = destiny, des problèmes étranges se produisent parce que j'opère avec le drapeau skip et iflags = skip_bytes ... donc, pas tellement de superstition. A besoin de soins et de tests car le destin peut ne pas fonctionner correctement dans certaines conditions où le destin se déroule sans heurts. J'ai écrit un script pour enregistrer un gros fichier sur clé USB avec des étapes. Copie complète de 400 Mo utilisée pour gâcher la partition de disque de la carte SD.
Sergio Abreu