GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi Mv(1) copie-t-il des objets si l'autorisation de déplacement est refusée ?

Est-ce que mv agir comme cp(1) si l'autorisation de déplacement du processus est refusée ?

Si oui, n'est-ce pas contraire à la règle de faire une chose et de la faire bien ?

Réponse acceptée :

La réponse courte est que non.

mv est défini pour :

effectuer des actions équivalentes à rename() fonction

rename() ne copie pas le contenu, il le renomme simplement sur le disque. C'est une opération complètement atomique qui n'échoue jamais partiellement.

Cela ne dit pas toute l'histoire, cependant. Où cet effet peut se produit lorsque vous essayez de déplacer un fichier entre des périphériques :dans ce cas, il n'est pas possible de renommer dans le système de fichiers. Pour avoir l'effet de déplacer, mv copie d'abord la source vers la destination, puis supprime la source. En effet, mv /mnt/a/X /mnt/b/Y est essentiellement équivalent à cp /mnt/a/X /mnt/b/Y && rm /mnt/a/X . C'est la seule façon de déplacer des fichiers entre appareils.

Quand mv n'a pas l'autorisation de supprimer ce fichier source, une erreur sera signalée, mais à ce stade, la copie a déjà eu lieu. Il n'est pas possible d'éviter cela en vérifiant les autorisations à l'avance en raison des conditions de course possibles où les autorisations changent pendant l'opération.

Il n'y a vraiment aucun moyen d'empêcher cette éventualité possible, autre que de rendre impossible le déplacement de fichiers entre les appareils. Le choix d'autoriser mv entre n'importe quelle source et destination simplifie les choses dans le cas général, au détriment d'un comportement étrange (mais non destructif) dans ces cas inhabituels.

C'est aussi pourquoi le déplacement d'un fichier volumineux dans un seul appareil est tellement plus rapide que de le déplacer vers un autre.


Linux
  1. pip freeze renvoie une erreur :Autorisation refusée :hg

  2. Autorisation Sudo refusée mais Su accorde l'autorisation ?

  3. Pourquoi l'heure Unix commence-t-elle au 1970-01-01 ?

  4. Pourquoi le conteneur Docker invite-t-il l'autorisation refusée ?

  5. autorisation docker.sock refusée

Pourquoi `exit &` ne fonctionne pas ?

beaucoup de (autorisation refusée) dans catalina.out

Pourquoi rsync ne parvient-il pas à copier les fichiers de /sys sous Linux ?

erreur de montage 13 =Autorisation refusée

Pourquoi chmod +w ne donne-t-il pas l'autorisation d'écrire à other(o)

"Autorisation refusée" à un fichier que je possède ?