Solution 1 :
Les deux sont un wrapper à la même fonction fondamentale qui est un unlink()
appel système.
Pour peser les différences entre les utilitaires de l'espace utilisateur.
rm(1)
:
- Plus d'options.
- Plus de commentaires.
- Vérification de l'intégrité.
- Un peu plus lent pour les appels uniques en raison de ce qui précède.
- Peut être appelé avec plusieurs arguments en même temps.
unlink(1)
:
- Moins de vérifications d'intégrité.
- Impossible de supprimer les répertoires.
- Impossible de revenir en arrière.
- Ne peut accepter qu'un seul argument à la fois.
- Légèrement plus léger pour les appels uniques en raison de sa simplicité.
- Plus lent qu'en donnant
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 pur au système unlink(2)
fonction, dont je réalise maintenant que ce n'est probablement pas ce que vous comptabilisez.
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é, j'ai clarifié la différence entre unlink(1)
et unlink(2)
. La sémantique va toujours différer d'une plate-forme à l'autre.
Solution 2 :
Au niveau de la spécification POSIX, ce que fait rm est spécifié beaucoup plus précisément que ce que fait unlink.
La portabilité du résultat semble être meilleure avec rm, si votre script doit s'exécuter sur tous les systèmes d'exploitation.
Solution 3 :
La partie lente de la suppression concerne 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 est juste un rm "light". rm a plus de fonctionnalités mais ils font la même chose.