GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Mv(1) Menyalin Objek Jika Izin Untuk Bergerak Ditolak?

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.


Linux
  1. pip freeze mengembalikan kesalahan:Izin ditolak:hg

  2. Izin Sudo Ditolak Tapi Su Memberikan Izin?

  3. Mengapa `keluar &` Tidak Berfungsi?

  1. banyak (Izin ditolak) di catalina.out

  2. Mengapa docker container meminta Izin ditolak?

  3. izin docker.sock ditolak

  1. Apa yang dilakukan izin eksekusi?

  2. Mengapa saya mendapatkan Izin Ditolak saat menjalankan ssh-add?

  3. izin ditolak pada file authorized_key