GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué Mv(1) copia objetos si se niega el permiso para mover?

Hace mv actuar como cp(1) si se denegó el permiso para que el proceso se mudara?

Si es así, ¿no va en contra de la regla hacer una cosa y hacerlo bien?

Respuesta aceptada:

La respuesta corta es que no.

mv se define como:

realizar acciones equivalentes a rename() función

rename() no copia el contenido, simplemente le cambia el nombre en el disco. Es una operación completamente atómica que nunca falla parcialmente completa.

Sin embargo, eso no cuenta toda la historia. Donde este efecto puede Sucede cuando se intenta mover un archivo entre dispositivos:en ese caso, no es posible cambiar el nombre en el sistema de archivos. Para tener el efecto de mover, mv primero copia la fuente al destino y luego elimina la fuente. En efecto, mv /mnt/a/X /mnt/b/Y es esencialmente equivalente a cp /mnt/a/X /mnt/b/Y && rm /mnt/a/X . Esa es la única forma en que podría funcionar mover archivos entre dispositivos.

Cuando mv no tiene permiso para eliminar ese archivo de origen, se informará un error, pero en ese momento ya se ha producido la copia. No es posible evitarlo verificando los permisos con anticipación debido a las posibles condiciones de carrera donde los permisos cambian durante la operación.

Realmente no hay forma de prevenir esta posible eventualidad, aparte de hacer que sea imposible mover archivos entre dispositivos. La opción de permitir mv entre cualquier origen y destino simplifica las cosas en el caso general, a expensas de un comportamiento extraño (pero no destructivo) en estos casos inusuales.

Esta es también la razón por la cual mover un archivo grande dentro de un solo dispositivo es mucho más rápido que moverlo a otro.


Linux
  1. pip freeze devuelve un error:Permiso denegado:hg

  2. ¿Permiso de Sudo denegado pero Su otorga permiso?

  3. ¿Por qué `exit &` no funciona?

  4. un montón de (Permiso denegado) en catalina.out

  5. permiso docker.sock denegado

¿Por qué [a-z] coincide con letras minúsculas en Bash?

¿Por qué Sudo ignora los alias?

¿Por qué el tiempo de Unix comienza en 1970-01-01?

¿Por qué el contenedor docker solicita Permiso denegado?

¿Por qué recibo Permiso denegado cuando ejecuto ssh-add?

permiso denegado en el archivo authorized_key