¿Cuál es la diferencia entre desvincular y rm?

¿Cuál es la diferencia entre desvincular y rm?

¿Desvincular es más rápido que rm?

Respuesta1

Ambos son un contenedor de la misma función fundamental que es una unlink()llamada al sistema.

Sopesar las diferencias entre las utilidades del espacio de usuario.

rm(1):

  • Mas opciones.
  • Más comentarios.
  • Comprobación de cordura.
  • Un poco más lento para llamadas individuales como resultado de lo anterior.
  • Se puede llamar con múltiples argumentos al mismo tiempo.

unlink(1):

  • Menos control de cordura.
  • No se pueden eliminar directorios.
  • No se puede recurrir.
  • Sólo se puede aceptar un argumento a la vez.
  • Ligeramente más sencillo para llamadas individuales debido a su simplicidad.
  • Más lento en comparación con dar rm(1)múltiples argumentos.

Podrías demostrar la diferencia con:

$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand `2'

$ touch $(seq 1 100)
$ time rm $(seq 1 100)

real    0m0.048s
user    0m0.004s
sys     0m0.008s

$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done

real    0m0.207s
user    0m0.044s
sys     0m0.112s

$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done

real    0m0.167s
user    0m0.048s
sys     0m0.120s

Sin embargo, si estamos hablando de una llamada pura a la unlink(2)función del sistema, ahora me doy cuenta de que probablemente no sea lo que estás considerando.

Puede realizar un sistema unlink()tanto en directorios como en archivos. Pero si el directorio es padre de otros directorios y archivos, entonces el enlace a ese padre se eliminará, pero los hijos quedarán colgando. Lo cual no es nada ideal.

Editar:

Lo siento, aclaré la diferencia entre unlink(1)y unlink(2). La semántica seguirá siendo diferente entre plataformas.

Respuesta2

En el nivel de especificación POSIX, ¿quéhabitaciónlo que hace se especifica mucho más estrictamente que lo quedesconectarhace.

Es probable que la portabilidad del resultado sea mejor usando rm, si su script tiene que ejecutarse en varios sistemas operativos.

Respuesta3

La parte lenta de la eliminación es el código del sistema de archivos y el disco, no la preparación del espacio de usuario de la llamada al sistema unlink().

Es decir: si la diferencia de velocidad es importante, entonces no debería almacenar los datos en el sistema de archivos.

desvincular es sólo una "ligera" firme. rm tiene más funciones pero hacen lo mismo.

información relacionada