Respuestas:
Ambos son un contenedor de la misma función fundamental que es una unlink()
llamada al sistema.
Para sopesar las diferencias entre las utilidades de tierra de usuario.
rm(1)
:
unlink(1)
:
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 no adulterada a la unlink(2)
función del sistema , de lo que ahora me doy cuenta es que probablemente no es lo que está contando.
Puede realizar un sistema unlink()
en directorios y archivos por igual. Pero si el directorio es padre de otros directorios y archivos, entonces el enlace a ese padre se eliminaría, pero los hijos quedarían colgando. Lo cual es menos que ideal.
Editar:
Lo sentimos, aclaró la diferencia entre unlink(1)
y unlink(2)
. La semántica seguirá siendo diferente entre plataformas.
mkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1
. Si desvincula el directorio padre, entonces el espacio consumido por los hijos debería perderse hasta el momento en que fsck encuentre la discrepancia.
La parte lenta de la eliminación es el código del sistema de archivos y el contenido del disco, no la preparación del espacio del 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.
unlink es solo una "luz" rm. rm tiene más funciones pero hacen lo mismo.