75 votes

Quelle est la différence entre unlink et rm ?

Est-ce que unlink est plus rapide que rm ?

80voto

Dan Carley Points 24959

Les deux sont une enveloppe pour la même fonction fondamentale qui est un unlink() appel système.

Pour peser les différences entre les utilies de userland.

rm(1) :

  • Plus d'options.
  • Plus de commentaires.
  • Vérification de la santé mentale.
  • Un peu plus lent pour les appels simples en raison de ce qui précède.
  • Peut être appelé avec plusieurs arguments en même temps.

unlink(1) :

  • Moins de contrôle de la santé mentale.
  • Impossible de supprimer des répertoires.
  • Impossible d'effectuer une récursion.
  • On ne peut prendre qu'un seul argument à la fois.
  • Marginalement plus léger pour les appels simples en raison de sa simplicité.
  • Plus lent que le don rm(1) des arguments multiples.

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 et simple au système unlink(2) qui, je le réalise maintenant, n'est probablement pas ce que vous cherchez.

Vous pouvez effectuer un système unlink() sur les répertoires comme sur les fichiers. Mais si le répertoire est un parent d'autres répertoires et fichiers, alors le lien vers ce parent sera supprimé, mais les enfants seront laissés en suspens. Ce qui est loin d'être idéal.

Edit :

Désolé, j'ai clarifié la différence entre unlink(1) y unlink(2) . La sémantique varie toujours d'une plate-forme à l'autre.

11voto

Samizdata Points 1119

Au niveau de la spécification POSIX, qu'est-ce que rm est spécifié de manière beaucoup plus stricte que ce que délier fait.

La portabilité du résultat semble susceptible d'être meilleure en utilisant rm, si votre script doit fonctionner sur plusieurs OS.

6voto

Andrej Mitrović Points 313

La partie lente de la suppression est le code du système de fichiers et le disque, pas la préparation en espace utilisateur de l'appel système unlink().

En d'autres termes, 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.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X