GNU/Linux >> Linux Esercitazione >  >> Linux

Perché Mv(1) copia gli oggetti se l'autorizzazione a spostarsi è negata?

mv agire come cp(1) se l'autorizzazione allo spostamento del processo è negata?

Se sì, non è contro la regola fare una cosa e farla bene?

Risposta accettata:

La risposta breve è che non è così.

mv è definito in:

eseguire azioni equivalenti a rename() funzione

rename() non copia il contenuto, lo rinomina semplicemente su disco. È un'operazione completamente atomica che non fallisce mai parzialmente completata.

Questo non racconta l'intera storia, tuttavia. Dove questo effetto può succede quando si tenta di spostare un file tra dispositivi:in tal caso, non è possibile eseguire la ridenominazione nel filesystem. Per avere l'effetto di spostamento, mv prima copia la fonte nella destinazione, quindi elimina la fonte. In effetti, mv /mnt/a/X /mnt/b/Y è essenzialmente equivalente a cp /mnt/a/X /mnt/b/Y && rm /mnt/a/X . Questo è l'unico modo in cui lo spostamento di file tra dispositivi potrebbe funzionare.

Quando mv non ha il permesso di eliminare quel file sorgente, verrà segnalato un errore, ma a quel punto la copia è già avvenuta. Non è possibile evitarlo controllando in anticipo i permessi a causa di possibili condizioni di gara in cui i permessi cambiano durante l'operazione.

Non c'è davvero alcun modo per prevenire questa possibile eventualità, a parte rendere impossibile lo spostamento di file tra dispositivi. La scelta di consentire mv tra qualsiasi fonte e destinazione rende le cose più semplici nel caso generale, a scapito di comportamenti strani (ma non distruttivi) in questi casi insoliti.

Questo è anche il motivo per cui spostare un file di grandi dimensioni all'interno di un singolo dispositivo è molto più veloce che spostarlo su un altro.


Linux
  1. Perché `esce &` non funziona?

  2. un sacco di (Autorizzazione negata) in catalina.out

  3. Perché il contenitore docker richiede Autorizzazione negata?

  4. Autorizzazione docker.sock negata

  5. Cosa fa il permesso di esecuzione?

Perché Unix Time inizia al 1970-01-01?

Perché ricevo Autorizzazione negata quando eseguo ssh-add?

autorizzazione negata sul file authorized_key

"Permesso negato" a un file che possiedo?

tcpdump:out.pcap:Autorizzazione negata

POSTFIX permesso main.cf negato