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


13
  • mv a b

  • cp a b;rm a

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


1
¿atomicidad? Sin embargo, no sé realmente si el comando mv es atómico.
Adriano Varoli Piazza

Si. ¿Por qué preguntas?

1
Ahora, mves similar a ln+ rm, sin embargo, el primero funcionará para movimientos entre sistemas de archivos (que luego se convierte en cp+ rm), mientras que el último fallará en ln(que no admite enlaces duros entre sistemas de archivos).
Chris Jester-Young

Cada día es un día escolar - para nadie viene a esta preguntándose cómo reemplazar este comportamiento predeterminado que necesita el --remove-destinationinterruptor - stackoverflow.com/a/9371263/409638
Robert

Respuestas:


20

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


pero hacen exactamente lo mismo, ¿verdad?
Lazer

8
No, no lo hacen.

2
@eSKay: No. Dos escenarios: 1. El objetivo no existe. mvsolo cambia el nombre del archivo (el mismo inodo que el archivo original). cpcrea un nuevo inodo para el nuevo archivo. 2. El objetivo existe. mvdesvincula (elimina) el archivo de destino y renombra en un solo paso. cpsobrescribe el inodo del archivo de destino.
Chris Jester-Young

77
Además, mvnunca cambia el permiso o la propiedad. Imagine que quiere mover un archivo del homedir de su amigo a su propio homedir. Si mvlo haces, terminarás con un archivo en tu homedir que pertenece a tu amigo. No puede chowno, chmody dependiendo de los permisos, ni siquiera lo modifica o lo lee. Si lo haces cpseguido por rmel archivo te pertenecerá y todo está bien.
Ludwig Weinzierl

9

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 supone que mv se implementa utilizando rename(), que es la llamada que tiene la garantía. Vea, por ejemplo, esta publicación del grupo de noticias , que cita POSIX:

Esta función rename () es equivalente para archivos normales a la definida por el estándar ISO C. Su inclusión aquí amplía esa definición para incluir acciones en 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.


7

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

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

Copiar y eliminar

  • 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

4

Cuando la fuente y el destino están en el mismo volumen físico, entonces el primer enfoque es simplemente cambiar el nombre y es muy rápido (incluso si los archivos son muy grandes).

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


3

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

Si.

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


2

cp y rm son mucho más pesados ​​en el uso del disco y pueden fallar por razones de espacio en disco.


2

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.