mv (Unix)

mv (engl. Abkürzung für move) ist ein Unix-Befehl, der eine oder mehrere Dateien oder Verzeichnisse von einem Ort zum anderen verschiebt.

Verwendung

Der Syntax von mv funktioniert analog zu cp(1):

mv quelldatei zieldatei

Mehrere Dateien können gleichzeitig in ein Zielverzeichnis verschoben werden:

mv quelldateien ... zielverzeichnis

Funktion

Das Verschieben geschieht für den Benutzer transparent: es ist unabhängig davon, ob Quelle und Ziel auf unterschiedlichen Dateisystemen liegen oder nicht. Befinden sich alle angegebenen Namen auf derselben Partition, werden nur die entsprechenden Einträge in den Verzeichnis-Inodes geändert. Weitere Datenblöcke müssen nicht bewegt werden.

Ist dagegen das Ziel auf einem anderen Dateisystem gemountet, werden die Ursprungs-Datenblöcke tatsächlich kopiert und anschließend in den Ausgangsverzeichnissen entsprechend rm(1) mit unlink(2) entfernt.

Aus diesen Gründen sind zum Verschieben von Dateien Schreibrechte sowohl im Quell- als auch Zielverzeichnis nötig.

Konflikte bei existierenden Zieldateien

Wenn eine Datei zu einem Dateinamen einer bereits existierenden Datei verschoben wird, so wird letztere gelöscht. Wenn für die existierende Zieldatei keine Schreibrechte vorhanden sind, für das Verzeichnis der Zieldatei allerdings schon, dann fragt mv interaktiv nach, ob er die Datei überschreiben soll, wenn der Parameter -f (für force) nicht gesetzt ist:

$ ls -l
insgesamt 0
-rw-r--r-- 1 sven users  0 22. Apr 22:51 a.txt
drwxr-xr-x 2 sven users 72 22. Apr 22:51 ziel

$ ls -l ziel/
insgesamt 0
-r--r--r-- 1 sven users 0 22. Apr 22:51 a.txt

$ mv a.txt ziel
mv: Überschreiben von »ziel/a.txt«, über Modus 0444 hinwegsetzen?

Der -i-Parameter verhindert versehentliches Überschreiben.

Abgrenzung zum Kopieren und Löschen von Dateien

Es sei angemerkt, dass normalerweise das Verschieben von Dateien im gleichen Dateisystem nicht identisch ist mit der Aktion des Kopierens dieser Datei und dem anschließenden Löschen des Originals. Beim Verschieben einer Datei auf dem gleichen Dateisystem wird in Unix-Dateisystemen einfach der Hardlink der Datei aus dem Quellverzeichnis entfernt und ein neuer zum Zielverzeichnis hinzugefügt. Dabei bleibt die Datei (der Inode) selbst unberührt, d. h. der Inode und damit die Position der Datei auf dem Speichermedium ändert sich nicht.

Durch diesen Zusammenhang erklären sich auch die Verhältnisse der Dateirechte: Man kann eine Datei, auf die man keinen Lesezugriff hat, nicht kopieren, aber man kann sie verschieben (vorausgesetzt man hat Schreibrechte im Original- und Zielverzeichnis, siehe oben). Analog ist die Denkweise bei Verzeichnissen: Es sei ein mit Dateien gefülltes Verzeichnis gegeben, auf deren Dateien man keine Schreibrechte hat. Entsprechend darf man das Verzeichnis nicht löschen, da die Berechtigung fehlt, die Inhalte zu löschen. Trotzdem kann man aber das Verzeichnis selbst verschieben.

Siehe auch

Weblinks

Wikibooks: Linux-Praxisbuch: mv – Lern- und Lehrmaterialien