GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum kopiert Mv(1) Objekte, wenn die Erlaubnis zum Verschieben verweigert wird?

Macht mv agieren als cp(1) wenn Erlaubnis zum Verschieben des Prozesses verweigert?

Wenn ja, ist es nicht gegen die Regel, eine Sache zu tun und es gut zu machen?

Akzeptierte Antwort:

Die kurze Antwort lautet:Nein.

mv ist definiert als:

Aktionen ausführen, die rename() entsprechen Funktion

rename() kopiert keine Inhalte, sondern benennt sie einfach auf der Festplatte um. Es ist eine vollständig atomare Operation, die niemals teilweise vollständig fehlschlägt.

Das erzählt jedoch nicht die ganze Geschichte. Wo dieser Effekt kann Dies passiert, wenn Sie versuchen, eine Datei zwischen Geräten zu verschieben:In diesem Fall ist es nicht möglich, die Umbenennung im Dateisystem vorzunehmen. Um den Effekt des Bewegens zu haben, mv kopiert zuerst die Quelle zum Ziel und löscht dann die Quelle. Tatsächlich mv /mnt/a/X /mnt/b/Y entspricht im Wesentlichen cp /mnt/a/X /mnt/b/Y && rm /mnt/a/X . Nur so könnte das Verschieben von Dateien zwischen Geräten funktionieren.

Wenn mv keine Berechtigung zum Löschen dieser Quelldatei hat, wird ein Fehler gemeldet, aber zu diesem Zeitpunkt ist die Kopie bereits erfolgt. Es ist nicht möglich, dies zu vermeiden, indem die Berechtigungen im Voraus überprüft werden, da sich die Berechtigungen aufgrund möglicher Race-Bedingungen während des Betriebs ändern.

Es gibt wirklich keine Möglichkeit, diese mögliche Eventualität zu verhindern, außer es unmöglich zu machen, Dateien zwischen Geräten überhaupt zu verschieben. Die Wahl, mv zuzulassen zwischen jeder Quelle und jedem Ziel macht die Dinge im allgemeinen Fall einfacher, auf Kosten von seltsamem (aber nicht destruktivem) Verhalten in diesen ungewöhnlichen Fällen.

Das ist auch der Grund, warum das Verschieben einer großen Datei innerhalb eines einzelnen Geräts so viel schneller ist als das Verschieben auf ein anderes.


Linux
  1. pip freeze gibt einen Fehler zurück:Permission denied:hg

  2. Warum benötigt der Root-Benutzer eine Sudo-Berechtigung?

  3. Warum stimmt [a-z] mit Kleinbuchstaben in Bash überein?

  4. Warum ignoriert Sudo Aliasse?

  5. Warum funktioniert `exit &` nicht?

Warum kann rsync keine Dateien von /sys in Linux kopieren?

Einhängefehler 13 =Berechtigung verweigert

Warum gibt chmod +w anderen(o) keine Schreibrechte

„Berechtigung verweigert“ für eine Datei, die ich besitze?

tcpdump:out.pcap:Zugriff verweigert

POSTFIX main.cf-Berechtigung verweigert