La dissociation est-elle plus rapide que rm?
Les deux sont un wrapper pour la même fonction fondamentale qui est un appel système unlink()
.
Pour peser les différences entre les utilisations de l'espace utilisateur.
rm(1)
:
unlink(1)
:
rm(1)
plusieurs arguments.Vous pourriez démontrer la différence avec:
$ 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
Si toutefois nous parlons d'un appel sans faille à la fonction système unlink(2)
, dont je me rends compte maintenant, ce n'est probablement pas ce que vous expliquez.
Vous pouvez effectuer un système unlink()
sur les répertoires et les fichiers. Mais si le répertoire est un parent d'autres répertoires et fichiers, le lien vers ce parent sera supprimé, mais les enfants resteront suspendus. Ce qui n'est pas idéal.
Modifier:
Désolé, clarifié la différence entre unlink(1)
et unlink(2)
. La sémantique va toujours différer d'une plateforme à l'autre.
La partie lente de la suppression est le code du système de fichiers et les éléments du disque, pas la préparation de l'espace utilisateur de l'appel système unlink ().
C'est-à-dire: si la différence de vitesse est importante, vous ne devriez pas stocker les données sur le système de fichiers.
unlink n'est qu'un rm "light". rm a plus de fonctionnalités mais ils font la même chose.