Gibt es einen Unterschied zwischen mv und {cp + rm der alten Datei} unter Unix?


13
  • mv a b

  • cp a b;rm a

Dies sind zwei Sätze von Anweisungen. Gibt es einen Unterschied zwischen dem, was sie tun?


1
Atomarität? Ich weiß allerdings nicht genau, ob der Befehl mv atomar ist.
Adriano Varoli Piazza

Ja. Warum fragst du?

1
Jetzt mvist es ähnlich wie ln+ rm, jedoch funktioniert Ersteres für dateisystemübergreifende Verschiebungen (die dann nur zu cp+ werden rm), während Letzteres bei fehlschlägt ln(was keine dateisystemübergreifenden Hardlinks unterstützt).
Chris Jester-Young

Jeder Tag ist ein Schultag - für alle, die sich fragen, wie dieses Standardverhalten außer Kraft gesetzt werden kann, ist der --remove-destinationSwitch erforderlich
robert

Antworten:


20

Angenommen, die beteiligten Dateien befinden sich im selben Dateisystem, dann ändert mv einfach die Zeiger im Dateisystem, während cp den gesamten Inhalt der Datei kopiert und rm erneut die Zeiger ändert. Mv ist also weitaus effizienter.


aber sie machen genau dasselbe, oder?
Lazer

8
Nein, das tun sie nicht.

2
@eSKay: Nein. Zwei Szenarien: 1. Das Ziel existiert nicht. mvbenennt einfach die Datei um (gleicher Inode wie die Originaldatei). cperstellt einen neuen Inode für die neue Datei. 2. Das Ziel existiert. mvHebt die Verknüpfung der Zieldatei auf (entfernt sie) und benennt sie in einem Schritt um. cpüberschreibt den Inode der Zieldatei.
Chris Jester-Young

7
Ändert auch mvniemals die Erlaubnis oder das Eigentum. Stellen Sie sich vor, Sie möchten eine Datei von Ihrem Buddy-Verzeichnis in Ihr eigenes Verzeichnis verschieben. Wenn Sie mves tun, erhalten Sie eine Datei in Ihrem Homedir, die Ihrem Freund gehört. Sie können chownoder chmodund je nach Berechtigung nicht einmal ändern oder lesen. Wenn Sie cpgefolgt von rmder Datei zu Ihnen gehören und alles in Ordnung ist.
Ludwig Weinzierl

9

Ja, mv hat die Chance, auf derselben Festplatte atomar zu sein, wohingegen die Kombination von cp und rm niemals die Chance hat.

Dies setzt voraus, dass mv mithilfe von implementiert wird. Dies ist rename()der Aufruf, für den die Garantie gilt. Siehe zum Beispiel diesen Newsgroup-Beitrag , der POSIX zitiert:

Diese rename () -Funktion entspricht für reguläre Dateien der im ISO C-Standard definierten. Die hier enthaltene Definition erweitert diese Definition um Aktionen für Verzeichnisse und gibt das Verhalten an, wenn der neue Parameter eine bereits vorhandene Datei benennt. Diese Spezifikation erfordert, dass die Wirkung der Funktion atomar ist.


7

Auf demselben Dateisystem ändert mv die Verzeichnisreferenz und verweist auf denselben Inode (Dateidaten und Metadaten).

  • ist eine atomare Operation (kann nicht durch eine andere Prozessdateioperation unterbrochen werden)
  • nimmt nur eine unbedeutende Menge zusätzlichen Speicherplatzes in Anspruch (der zusätzliche Name im Verzeichnis)
  • Erhält die Dateiberechtigungen und das Eigentumsrecht
  • kann je nach Datenmenge viel schneller sein

Kopieren und entfernen

  • ist nicht atomar (ein anderer Prozess könnte zwischen den Befehlen cp und rm stören)
  • erfordert das zweimalige Speichern der Dateidaten auf der Festplatte für einen kurzen Zeitraum (zwischen den Befehlen cp und rm)
  • Ändert die Dateiberechtigungen und das Eigentumsrecht in die Standardeinstellungen
  • kann viel langsamer sein oder sogar ausfallen, abhängig von der Datenmenge

4

Wenn sich die Quelle und das Ziel auf demselben physischen Volume befinden, ist der erste Ansatz einfach eine Umbenennung und sehr schnell (auch wenn die Dateien sehr groß sind).

cp& rmmuss immer alle Daten laden / speichern, auch wenn es nicht nötig wäre.


3

mv ist im Wesentlichen eine "Umbenennungs" -Operation. Dies bedeutet, dass die Datei selbst an derselben Stelle auf der Festplatte verbleibt. Es wird keine tatsächliche Dateioperation ausgeführt.


2

Ja.

mv ändert einfach die Metadaten des Dateisystems in Bezug auf den Namen und den Speicherort der Datei, während cp eine separate Kopie der Datei erstellt. Dies dauert viel länger, da die erste Datei vollständig gelesen und der Inhalt dann in eine andere Datei geschrieben werden muss


2

cp und rm belasten die Datenträgernutzung erheblich und können aus Gründen des Speicherplatzes fehlschlagen.


2

Der Unterschied besteht darin, dass mv Dateiattribute beibehält, während cp dies standardmäßig nicht tut, z. B. wenn das Erstellungsdatum auf das aktuelle Datum gesetzt wird.

Um diese Standardeinstellung zu überschreiben, verwenden Sie "cp -p", um die letzte Datenänderung, den Zeitpunkt des letzten Zugriffs, die Benutzer- und Gruppen-ID (nur wenn die Berechtigung dazu vorhanden ist), Dateiberechtigungsbits sowie die SUID und SGID beizubehalten Bits.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.