Réponses:
Les deux sont un wrapper pour la même fonction fondamentale qui est un unlink()
appel système.
Peser les différences entre les utilisations.
rm(1)
:
unlink(1)
:
rm(1)
plusieurs arguments.Vous pouvez 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
Cependant, s’il s’agit d’un appel pur et simple à la unlink(2)
fonction système , je réalise maintenant que ce n’est probablement pas ce que vous déclarez.
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 en suspens. Ce qui est moins qu'idéal.
Modifier:
Désolé, a clarifié la différence entre unlink(1)
et unlink(2)
. La sémantique va toujours différer d'une plate-forme à l'autre.
mkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1
. Si vous avez dissocié le répertoire parent, l'espace utilisé par les enfants devrait être perdu jusqu'à ce que fsck trouve la différence.
La partie lente de la suppression concerne le code du système de fichiers et les éléments du disque, et non la préparation de l’appel système unlink () dans l’espace utilisateur.
Par exemple, si la différence de vitesse compte, vous ne devriez pas stocker les données dans le système de fichiers.
unlink est juste une entreprise "light". rm a plus de fonctionnalités mais fait la même chose.