Pregunta ¿Hay alguna diferencia entre mv y {cp + rm el archivo anterior} en Unix?


  • mv a b

  • cp a b;rm a

Estos son dos conjuntos de declaraciones. ¿Hay alguna diferencia entre lo que hacen?


12


origen


¿atomicidad? En realidad, no sé si el comando mv es atómico. - Adriano Varoli Piazza
Sí. ¿Por qué preguntas?
Ahora, mv es parecido a ln + rm, sin embargo, el primero funcionará para movimientos de sistema de archivos cruzados (que luego se convierte en cp + rm), mientras que el último fallará en ln (que no admite enlaces duros de sistemas de archivos cruzados). - Chris Jester-Young
Todos los días son día de escuela; para que cualquiera que se pregunte cómo anular este comportamiento predeterminado, usted necesita --remove-destination interruptor - stackoverflow.com/a/9371263/409638 - robert


Respuestas:


Suponiendo que los archivos involucrados están en el mismo sistema de archivos, entonces mv simplemente cambia los punteros en el sistema de archivos, mientras que cp copia todo el contenido del archivo y, una vez más, cambia los punteros. Entonces mv es mucho más eficiente.


20



pero hacen exactamente lo mismo, ¿verdad? - Lazer
No, ellos no.
@eSKay: No. Dos escenarios: 1. El objetivo no existe. mv simplemente cambia el nombre del archivo (el mismo inodo que el archivo original). cp crea un nuevo inodo para el nuevo archivo. 2. El objetivo existe mv desvincula (elimina) el archivo de destino y cambia el nombre en un solo paso. cp sobrescribe el inodo del archivo de destino. - Chris Jester-Young
también mv nunca cambia el permiso o la propiedad. Imagina que quieres mover un archivo del hogar de tu amigo a tu propio hogar. Si tu mv terminará con un archivo en su hogar que le pertenece a su amigo. No puedes chown o chmod y dependiendo de los permisos ni siquiera modificarlo o leerlo. Si lo haces cp seguido por rm el archivo te pertenecerá y todo está bien. - Ludwig Weinzierl


Sí, mv tiene la posibilidad de ser atómico en el mismo disco, mientras que la combinación de cp y rm nunca lo ha hecho.

Esto es asumiendo que mv se implementa usando rename(), que es la llamada que tiene la garantía. Ver, por ejemplo, esta publicación del grupo de noticias, que cita POSIX:

Esta función rename () es equivalente   para archivos regulares a eso definido       por el estándar ISO C Su inclusión aquí expande esa definición   a       incluir acciones en los directorios y especifica el comportamiento cuando el nuevo       parámetro nombra un archivo que ya existe. Esa especificación       requiere que la acción de la función sea atómica.


9





En el mismo sistema de archivos mv cambia la referencia del directorio, apuntando al mismo inodo (datos de archivo y metadatos) de esta manera:

  • es una operación atómica (no puede ser interrumpida por otra operación de archivo de proceso)
  • toma solo una cantidad trivial de espacio en disco adicional (el nombre adicional en el directorio)
  • conserva los permisos de archivos y la propiedad
  • puede ser mucho más rápido, dependiendo de la cantidad de datos

Copia y quita

  • no es atómico (otro proceso podría interferir entre los comandos cp y rm)
  • requiere almacenar los datos del archivo dos veces en el disco durante un período corto (entre los comandos cp y rm)
  • cambia los permisos de archivos y la propiedad a los valores predeterminados
  • puede ser mucho más lento o incluso fallar, dependiendo de la cantidad de datos

7





Cuando la fuente y el destino están en el mismo volumen físico, el primer enfoque es simplemente un cambio de nombre y es muy rápido (incluso si el archivo es muy grande).

cp & rm siempre tendrá que cargar / almacenar todos los datos, incluso si no fuera necesario.


4





mv es en esencia una operación de "cambio de nombre". Esto significa que el archivo se deja en el mismo lugar en el disco. No se realiza ninguna operación de archivo real.


2





Sí.

mv simplemente cambia los metadatos del sistema de archivos en el archivo relacionado con su nombre y ubicación, mientras que cp crea una copia separada del archivo, lo que requiere mucho ya que debe leer completamente el primer archivo y luego escribir su contenido en otro archivo


2





cp y rm es mucho más pesado en el uso del disco y puede fallar por razones de espacio en el disco.


2





La diferencia es que mv conserva los atributos de archivo mientras que cp por defecto no lo hace, por ejemplo, establecer la fecha de creación en la fecha actual.

Para anular este valor predeterminado, use "cp -p" para conservar la última modificación de datos, la hora del último acceso, la identificación del usuario y la identificación del grupo (solo si tiene permisos para hacerlo), los bits de permiso de archivo y los bits SUID y SGID.


2