atomicity? Saya tidak benar-benar tahu apakah perintah mv adalah atom.
Adriano Varoli Piazza
Iya. Kenapa kamu bertanya?
1
Sekarang, mvmirip dengan ln+ rm, meskipun, yang pertama akan bekerja untuk perpindahan lintas-sistem file (yang kemudian menjadi cp+ rm), sedangkan yang terakhir akan gagal di ln(yang tidak mendukung tautan keras lintas-sistem file).
Chris Jester-Young
Setiap hari adalah hari sekolah - bagi siapa pun yang datang ke sini bertanya-tanya bagaimana menimpa perilaku default ini, Anda memerlukan --remove-destinationsakelar - stackoverflow.com/a/9371263/409638
robert
Jawaban:
20
Dengan asumsi file yang terlibat berada di sistem file yang sama, maka mv cukup mengubah pointer dalam sistem file, sedangkan cp menyalin seluruh isi file, dan rm sekali lagi mengubah pointer. Jadi mv jauh lebih efisien.
tetapi mereka melakukan hal yang persis sama, bukan?
Lazer
8
Tidak, mereka tidak.
2
@ eSKay: Tidak. Dua skenario: 1. Target tidak ada. mvhanya mengganti nama file (inode sama dengan file asli). cpmembuat inode baru untuk file baru. 2. Target memang ada. mvmembatalkan tautan (menghapus) file target, dan mengganti nama, dalam satu langkah. cpmenimpa inode file target.
Chris Jester-Young
7
Juga mvtidak pernah mengubah izin atau kepemilikan. Bayangkan Anda ingin memindahkan file dari homedir teman Anda ke homedir Anda sendiri. Jika Anda memilikinya mv, Anda akan berakhir dengan file di homedir Anda milik teman Anda. Anda tidak dapat chownatau chmoddan bergantung pada izin yang bahkan tidak mengubah atau membacanya. Jika Anda cpdiikuti oleh rmfile akan menjadi milik Anda dan semuanya baik-baik saja.
Ludwig Weinzierl
9
Ya, mv memiliki peluang menjadi atom pada disk yang sama, sedangkan kombinasi cp dan rm tidak pernah ada.
Ini dengan asumsi bahwa mv diimplementasikan menggunakan rename(), yang merupakan panggilan yang memiliki jaminan. Lihat, misalnya, posting newsgroup ini , yang mengutip POSIX:
Fungsi rename () ini setara untuk file biasa dengan yang ditentukan oleh standar ISO C. Penyertaannya di sini memperluas definisi itu untuk memasukkan tindakan pada direktori dan menentukan perilaku ketika parameter baru memberi nama file yang sudah ada. Spesifikasi itu mensyaratkan aksi fungsi menjadi atom.
Ketika sumber dan tujuan berada pada volume fisik yang sama, maka pendekatan pertama hanyalah mengubah nama dan sangat cepat (bahkan jika file sangat besar).
cp& rmakan selalu harus memuat / menyimpan semua data, bahkan jika itu tidak perlu.
mv pada dasarnya adalah operasi "ganti nama". Ini berarti file itu sendiri dibiarkan di tempat yang sama pada disk. Tidak ada operasi file yang sebenarnya dilakukan.
mv hanya mengubah metadata sistem file pada file yang berkaitan dengan nama dan lokasi itu, sedangkan cp membuat salinan file yang terpisah, yang membutuhkan waktu lebih lama karena harus sepenuhnya membaca file pertama dan kemudian menulis isinya ke file lain
Perbedaannya adalah bahwa mv menyimpan atribut file sedangkan cp secara default tidak, misalnya mengatur tanggal pembuatan ke tanggal saat ini.
Untuk mengganti default ini, gunakan "cp -p" untuk mempertahankan modifikasi data terakhir, waktu akses terakhir, ID pengguna dan ID grup (hanya jika ia memiliki izin untuk melakukan ini), mengajukan bit izin file dan SUID dan SGID bit.
mv
mirip denganln
+rm
, meskipun, yang pertama akan bekerja untuk perpindahan lintas-sistem file (yang kemudian menjadicp
+rm
), sedangkan yang terakhir akan gagal diln
(yang tidak mendukung tautan keras lintas-sistem file).--remove-destination
sakelar - stackoverflow.com/a/9371263/409638Jawaban:
Dengan asumsi file yang terlibat berada di sistem file yang sama, maka mv cukup mengubah pointer dalam sistem file, sedangkan cp menyalin seluruh isi file, dan rm sekali lagi mengubah pointer. Jadi mv jauh lebih efisien.
sumber
mv
hanya mengganti nama file (inode sama dengan file asli).cp
membuat inode baru untuk file baru. 2. Target memang ada.mv
membatalkan tautan (menghapus) file target, dan mengganti nama, dalam satu langkah.cp
menimpa inode file target.mv
tidak pernah mengubah izin atau kepemilikan. Bayangkan Anda ingin memindahkan file dari homedir teman Anda ke homedir Anda sendiri. Jika Anda memilikinyamv
, Anda akan berakhir dengan file di homedir Anda milik teman Anda. Anda tidak dapatchown
atauchmod
dan bergantung pada izin yang bahkan tidak mengubah atau membacanya. Jika Andacp
diikuti olehrm
file akan menjadi milik Anda dan semuanya baik-baik saja.Ya, mv memiliki peluang menjadi atom pada disk yang sama, sedangkan kombinasi cp dan rm tidak pernah ada.
Ini dengan asumsi bahwa mv diimplementasikan menggunakan
rename()
, yang merupakan panggilan yang memiliki jaminan. Lihat, misalnya, posting newsgroup ini , yang mengutip POSIX:sumber
Pada sistem file yang sama mv mengubah referensi direktori, menunjuk ke inode yang sama (data file dan metadata) dengan demikian:
Salin dan hapus
sumber
Ketika sumber dan tujuan berada pada volume fisik yang sama, maka pendekatan pertama hanyalah mengubah nama dan sangat cepat (bahkan jika file sangat besar).
cp
&rm
akan selalu harus memuat / menyimpan semua data, bahkan jika itu tidak perlu.sumber
mv pada dasarnya adalah operasi "ganti nama". Ini berarti file itu sendiri dibiarkan di tempat yang sama pada disk. Tidak ada operasi file yang sebenarnya dilakukan.
sumber
Iya.
mv hanya mengubah metadata sistem file pada file yang berkaitan dengan nama dan lokasi itu, sedangkan cp membuat salinan file yang terpisah, yang membutuhkan waktu lebih lama karena harus sepenuhnya membaca file pertama dan kemudian menulis isinya ke file lain
sumber
cp dan rm jauh lebih berat pada penggunaan disk, dan mungkin gagal karena alasan ruang disk.
sumber
Perbedaannya adalah bahwa mv menyimpan atribut file sedangkan cp secara default tidak, misalnya mengatur tanggal pembuatan ke tanggal saat ini.
Untuk mengganti default ini, gunakan "cp -p" untuk mempertahankan modifikasi data terakhir, waktu akses terakhir, ID pengguna dan ID grup (hanya jika ia memiliki izin untuk melakukan ini), mengajukan bit izin file dan SUID dan SGID bit.
sumber