Hat mv
fungieren als cp(1)
wenn die Erlaubnis für Prozess verweigert zu bewegen?
Wenn ja, ist es nicht gegen die Regel, eine Sache zu tun und es gut zu machen?
quelle
Hat mv
fungieren als cp(1)
wenn die Erlaubnis für Prozess verweigert zu bewegen?
Wenn ja, ist es nicht gegen die Regel, eine Sache zu tun und es gut zu machen?
Die kurze Antwort ist, dass dies nicht der Fall ist.
Führen Sie Aktionen aus, die der
rename()
Funktion entsprechen
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. Dieser Effekt kann auftreten , wenn versucht wird, eine Datei zwischen Geräten zu verschieben. In diesem Fall ist das Umbenennen im Dateisystem nicht möglich. Um den Effekt des Verschiebens zu erzielen, kopieren Sie mv
zuerst die Quelle an das Ziel und löschen Sie dann die Quelle. In der Tat mv /mnt/a/X /mnt/b/Y
ist im Wesentlichen gleichbedeutend mit cp /mnt/a/X /mnt/b/Y && rm /mnt/a/X
. Nur so kann das Verschieben von Dateien zwischen Geräten funktionieren.
Wenn Sie mv
nicht berechtigt sind, diese Quelldatei zu löschen, wird ein Fehler gemeldet, aber zu diesem Zeitpunkt ist die Kopie bereits aufgetreten. Es ist nicht möglich, dies zu vermeiden, indem Sie die Berechtigungen im Voraus überprüfen, da sich die Berechtigungen möglicherweise während des Betriebs ändern.
Es gibt wirklich keine Möglichkeit, diese mögliche Möglichkeit zu verhindern, außer es unmöglich zu machen, Dateien zwischen Geräten zu verschieben. Die Wahl, mv
zwischen einer Quelle und einem Ziel zuzulassen, vereinfacht die Dinge im allgemeinen Fall auf Kosten eines merkwürdigen (aber zerstörungsfreien) Verhaltens in diesen ungewöhnlichen Fällen.
Dies 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.