Jawaban:
Satu masalah lagi muncul di pikiran saya di mana catvs cpmembuat perbedaan yang signifikan:
Menurut definisi, cat akan memperluas file jarang, mengisi celah dengan nol "nyata" byte, sementara cp setidaknya bisa dikatakan untuk menjaga lubang.
File jarang adalah file di mana urutan nol byte telah digantikan oleh metadata untuk menghemat ruang. Anda dapat menguji dengan membuat satu dengan dd, dan menduplikatnya dengan alat pilihan Anda.
Buat file jarang (ganti ke / tmp sebelumnya untuk menghindari masalah - lihat catatan akhir):
15> cd /tmp
16> dd if=/dev/null of=sparsetest bs=512b seek=5
0+0 records in
0+0 records out
0 bytes (0 B) copied, 5.9256e-05 s, 0.0 kB/sukuran itu - seharusnya tidak memakan tempat.
17> du -sh sparsetest
0 sparsetestsalin dengan cp dan periksa ukurannya
18> cp sparsetest sparsecp
19> du -sh sparsecp
0 sparsecpsekarang salin dengan kucing dan periksa ukurannya
20> cat sparsetest > sparsecat
21> du -sh sparsecat
1.3M sparsecatcoba alat pilihan Anda untuk memeriksa perilaku mereka
jangan lupa bersih-bersih.
Catatan terakhir untuk berhati-hati: Eksperimen seperti ini memiliki kemungkinan yang melekat untuk meningkatkan ketenaran Anda dengan sysadmin lokal Anda jika Anda melakukannya pada sistem file yang merupakan bagian dari rencana cadangannya, atau penting untuk kesejahteraan sistem. Bergantung pada pilihan alat cadangannya, ia mungkin membutuhkan lebih banyak media tape daripada yang pernah dianggap mungkin untuk mencadangkan satu file 0-byte yang diperluas ke terabyte nol.
File lain yang tidak dapat disalin dengan kucing atau cp tidak akan termasuk file khusus perangkat, dll. Itu tergantung pada implementasi Anda dari alat penyalinan jika ia dapat menduplikasi node perangkat, atau apakah itu akan dengan senang hati menyalin isinya sebagai gantinya.
cpmemiliki opsi untuk mengontrol perilakunya pada file jarang; seperti, dengan --sparse=neverditentukan pada baris perintah, cpsama lambatnya cat.
Menurut komentar Keith , cpmempertahankan beberapa izin, dan catmembuat file baru seperti yang umaskditunjukkan. Jadi $2izin tidak dijaga yang $4/vmlinuzcukup bersih, sementara jika beberapa izin aneh diaktifkan $3, $4/System.mapakan tetap melakukannya.
cattahan luntur?
catcepat
Keduanya memiliki fungsionalitas yang setara dalam kedua kasus tersebut, tetapi cp adalah murni operasi file. "Ambil file ini dan buat salinannya di sana".
cat, di sisi lain, dimaksudkan untuk membuang isi file ke konsol. "Ambil file ini dan tampilkan di layar" dan kemudian mintalah seorang ninja menyerang layar dan mengarahkan ulang output ke tempat lain.
cp umumnya akan lebih efisien, karena tidak ada pengalihan saja, hanya menyalin langsung byte dari lokasi A ke lokasi B.
kucing akan menjadi read bytes -> output to console -> intercept output -> redirect to new file.
cattidak akan benar-benar output to console -> intercept output -> redirect to new file, file output untuk cat dapat stdout atau file normal, itu hanya akan output ke file, selama input tidak sama dengan output.
cattidak ada hubungannya dengan konsol. Keduanya catdan cpmembaca dari file input dan menulis ke file output. Dengan cat, file output dibuka oleh shell, sedangkan dengan cp, file output dibuka oleh cp; ini tidak membuat perbedaan dalam kinerja. cpmungkin lebih cepat, tetapi untuk alasan yang sama sekali berbeda: beberapa implementasi cpcoba tebak ukuran chunk yang tepat untuk kinerja tergantung pada sumber dan perangkat target; implementasi cattidak akan mengganggu.
Ini benar-benar masalah preferensi, IMHO.
Secara teknis tidak ada perbedaan nyata kecuali Anda menggunakan perintah cp dengan saklar -p untuk mempertahankan kepemilikan / grup file. Kalau tidak, itu hal yang sama secara fungsional. Namun jawaban Marc jauh lebih jelas dan akurat.
cptanpa -pmempertahankan beberapa izin. Misalnya, jika file sumber dapat dieksekusi, cpakan membuat file target dapat dieksekusi, tetapi cattidak akan.
cpbuat file seperti aslinya, sambilcatbuat file baru dengan konten yang sama.