Mengapa kita menggunakan cp untuk menyalin file dan bukan dd? (dalam turunan-unix)

21

Untuk menyalin file normal di * nix, saya hanya pernah melihat orang menggunakan cp (mis. cp /mnt/mydevice/myfile ~/myfile), Tetapi saya akhirnya bertemu dd, yang tampaknya melakukan hal yang persis sama ( dd if=/mnt/mydevice/myfile of=~/myfile). Saya melihat bahwa mereka memiliki beberapa parameter berbeda yang tersedia (dd tampaknya lebih baik dalam penyalinan yang disempurnakan), tetapi mereka tampak berlebihan. Apakah alat ini benar-benar melakukan hal yang sama?

pengguna232105
sumber
Mereka melakukan hal yang sama hanya untuk file biasa. Coba misalnya menyalin direktori dd.
Eddy_Em
... atau perangkat (seperti /dev/sda) dengan cp.
jpaugh
Apakah pertanyaan Anda dijawab?
Kruug
@ Eddy_Em, Ada apa dengan itu?
Pacerier

Jawaban:

13

Untuk menjawab pertanyaan utama Anda, tidak, mereka tidak melakukan hal yang sama.

dd berfungsi pada file yang Anda tentukan, membuatnya dapat menyalin data antar perangkat, atau dari perangkat ke file. Ini biasanya digunakan untuk memindahkan data jika perangkat yang terlibat secara khusus (buat gambar iso dari disk cd-rom misalnya: dd if = / dev / cdrom dari = mycdrom.iso), atau cadangan perangkat mentah (kadang-kadang digunakan dalam database RAC : dd if = / dev / raw / raw1 of = device_raw1)

cp digunakan untuk menduplikasi konten file ke file baru atau ke lokasi baru. hal-hal yang Anda inginkan secara khusus ada pelestarian kepemilikan, stempel waktu, dan mode (hak), dan mampu mengulang operasi (= mampu menyalin direktori).

Sumber

Kruug
sumber
3
Ah! Oke, jadi dd menyalin file mentah, sedangkan cp menyalin konten (yang memungkinkannya untuk menyalin direktori misalnya tanpa merusak sistem file). Terima kasih!
user232105
5
@ Kenru, saya pasti kehilangan sesuatu karena saya masih tidak melihat apa yang cpbisa dilakukan yang ddtidak bisa. ddjuga dapat "menduplikasi konten file ke file baru atau ke lokasi baru" dan "menjaga kepemilikan, stempel waktu, dan mode" bukan?
Pacerier
3
@Pacerier dari apa yang saya mengerti, cpadalah utilitas yang lebih terfokus sedangkan ddlebih umum. dddapat melakukan semua hal yang cpdapat dilakukan, tetapi cphanya dapat melakukan beberapa hal yang dddapat dilakukan.
Kruug
Saya tidak berpikir bahwa perbedaannya dijelaskan dengan jelas enoug. Apa yang tidak bisa dilakukan cp dan dd bisa? Dan sebaliknya?
Gorn
9

Mereka melakukan hal yang sama KECUALI Anda menentukan salah satu opsi ddyang membatasi byte yang disalin, seperti seekatau skipatau countatau jika Anda menggunakan ddopsi untuk bermutasi byte seperti conv. Jika Anda tidak menggunakan salah satu dari pilihan ini untuk dddan hanya menggunakan opsi lebih sering terlihat seperti if, of, bsmaka kedua utilitas melakukan hal yang sama: membuka kedua file, membaca dari input, menulis ke output sampai baik input habis atau output tidak dapat menerima lebih banyak byte.

Ada banyak takhyul tentang membaca dan menulis file "perangkat" yang menyatakan bahwa Anda harus menggunakan ddini, tetapi hanya itu, takhayul. ddtidak melakukan hal yang berbeda, kami hanya membuka file dan membaca dan menulis byte.

rebus
sumber
Kurang lebih ini ... jika Anda menggunakan = takdir tergantung pada perangkat itu, beberapa masalah dapat terjadi, mis. USB flash disk. Saya menemukan bahwa saya harus menggunakan >> takdir dan menghapus parameter = xxx agar berfungsi. Jika saya menggunakan = takdir masalah aneh terjadi karena saya oper dengan lewati dan iflags = lewati flag_bytes ... jadi, tidak ada banyak takhayul. Perlu perawatan dan pengujian karena = takdir mungkin tidak berfungsi dengan benar dalam beberapa kondisi di mana >> takdir berjalan mulus. Saya menulis skrip untuk menyimpan file besar ke flashdisk dengan langkah-langkah. Salinan 400MB penuh digunakan untuk mengacaukan partisi disk sdcard.
Sergio Abreu