Apakah mv
bertindak sebagai cp(1)
jika izin untuk proses pindah ditolak?
Jika demikian, bukankah itu melanggar aturan, lakukan satu hal dan lakukan dengan baik?
Jawaban yang Diterima:
Jawaban singkatnya adalah tidak.
mv
didefinisikan untuk:
melakukan tindakan yang setara dengan
rename()
fungsi
rename()
tidak menyalin konten, itu hanya mengganti namanya di disk. Ini adalah operasi atom yang tidak pernah gagal sebagian selesai.
Namun, itu tidak menceritakan keseluruhan cerita. Dimana efek ini bisa terjadi adalah ketika mencoba memindahkan file antar perangkat:dalam hal ini, tidak mungkin melakukan penggantian nama di sistem file. Untuk memiliki efek bergerak, mv
pertama-tama menyalin sumber ke tujuan, lalu menghapus sumbernya. Sebenarnya, mv /mnt/a/X /mnt/b/Y
pada dasarnya setara dengan cp /mnt/a/X /mnt/b/Y && rm /mnt/a/X
. Itulah satu-satunya cara untuk memindahkan file antar perangkat.
Ketika mv
tidak memiliki izin untuk menghapus file sumber itu, kesalahan akan dilaporkan, tetapi pada saat itu salinan telah terjadi. Tidak mungkin untuk menghindarinya dengan memeriksa izin terlebih dahulu karena kemungkinan kondisi balapan di mana izin berubah selama operasi.
Benar-benar tidak ada cara untuk mencegah kemungkinan kemungkinan ini, selain membuatnya mustahil untuk memindahkan file antar perangkat sama sekali. Pilihan untuk mengizinkan mv
antara sumber dan tujuan mana pun membuat segalanya lebih sederhana dalam kasus umum, dengan mengorbankan perilaku aneh (tetapi tidak merusak) dalam kasus yang tidak biasa ini.
Ini juga mengapa memindahkan file besar dalam satu perangkat jauh lebih cepat daripada memindahkannya ke perangkat lain.