web-dev-qa-db-fra.com

Quelle est la difference entre unlink et rm?

La dissociation est-elle plus rapide que rm?

64
Marcin

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):

  • 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 vérification d'esprit.
  • Impossible de supprimer les répertoires.
  • Impossible de recurer.
  • 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 par rapport à donner à 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.

69
Dan Carley

Au niveau de la spécification POSIX, ce que fait rm est spécifié beaucoup plus étroitement que ce que fait nlink .

La portabilité du résultat semble probablement meilleure en utilisant rm, si votre script doit s'exécuter sur les systèmes d'exploitation.

8
Mike G.

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.

4
Thomas