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

Verschieben von Dateien unter Linux ohne mv

Der bescheidene mv command ist eines dieser nützlichen Tools, die Sie auf jeder POSIX-Box finden, der Sie begegnen. Seine Aufgabe ist klar definiert, und es erfüllt sie gut:Verschieben einer Datei von einem Ort in einem Dateisystem zu einem anderen. Aber Linux ist absolut flexibel, und es gibt andere Optionen zum Verschieben von Dateien. Die Verwendung verschiedener Tools kann kleine Vorteile bieten, die perfekt zu einem bestimmten Anwendungsfall passen.

Bevor Sie sich zu weit von mv entfernen , sehen Sie sich die Standardergebnisse dieses Befehls an. Erstellen Sie zuerst ein Verzeichnis und generieren Sie einige Dateien mit Berechtigungen auf 777:

$ mkdir example
$ touch example/{foo,bar,baz}
$ for i in example/*; do ls /bin > "${i}"; done
$ chmod 777 example/*

Sie denken wahrscheinlich nicht so darüber nach, aber Dateien existieren als Einträge, sogenannte Indexknoten (allgemein bekannt als Inodes ), in einem Dateisystem. Mit dem Befehl ls und seinem --inode können Sie sehen, welchen Inode eine Datei belegt Möglichkeit:

$ ls --inode example/foo
7476868 example/foo

Verschieben Sie diese Datei testweise aus dem Beispielverzeichnis in Ihr aktuelles Verzeichnis und sehen Sie sich dann die Dateiattribute an:

$ mv example/foo .
$ ls -l -G -g --inode
7476868 -rwxrwxrwx. 1 29545 Aug  2 07:28 foo

Wie Sie sehen können, wurde die Originaldatei – zusammen mit ihren bestehenden Berechtigungen – „verschoben“, aber ihr Inode hat sich nicht geändert.

Das Linux-Terminal

  • Die 7 besten Terminalemulatoren für Linux
  • 10 Befehlszeilentools für die Datenanalyse unter Linux
  • Jetzt herunterladen:SSH-Spickzettel
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Linux-Befehlszeilen-Tutorials

So funktioniert die mv Das Tool ist so programmiert, dass es eine Datei verschiebt:Lassen Sie den Inode unverändert (es sei denn, die Datei wird in ein anderes Dateisystem verschoben) und behalten Sie den Besitz und die Berechtigungen bei.

Andere Tools bieten andere Optionen.

Kopieren und entfernen

Auf einigen Systemen ist die Move-Aktion eine echte Move-Aktion:Bits werden von einem Punkt im Dateisystem entfernt und einem anderen neu zugewiesen. Dieses Verhalten ist weitgehend in Ungnade gefallen. Move-Aktionen sind jetzt entweder Neuzuweisungen von Attributen (ein Inode zeigt jetzt auf einen anderen Ort in Ihrer Dateiorganisation) oder Zusammenführungen einer Copy-Aktion, gefolgt von einer Remove-Aktion.

Die philosophische Absicht dieses Designs ist sicherzustellen dass, sollte ein Umzug fehlschlagen, eine Datei nicht in Stücke gelassen wird.

Der cp Befehl, im Gegensatz zu mv , erstellt ein brandneues Datenobjekt in Ihrem Dateisystem. Es hat eine neue Inode-Position und unterliegt Ihrer aktiven umask. Mit dem cp können Sie einen Zug imitieren und rm (oder Papierkorb, falls vorhanden) Befehle:

$ cp example/foo .
$ ls -l -G -g --inode
7476869 -rwxrwxr-x. 29545 Aug  2 11:58 foo
$ trash example/foo

Das neue foo Die Datei in diesem Beispiel hat 775 Berechtigungen erhalten, da die umask des Speicherorts ausdrücklich Schreibberechtigungen ausschließt:

$ umask
0002

Weitere Informationen zu umask finden Sie im Artikel von Alex Juarez über Dateiberechtigungen.

Katzen und entfernen

Ähnlich wie beim Kopieren und Entfernen mit der Katze (oder tac , für diese Angelegenheit) Befehl weist verschiedene Berechtigungen zu, wenn Ihre "verschobene" Datei erstellt wird. Angenommen eine frische Testumgebung ohne foo im aktuellen Verzeichnis:

$ cat example/foo > foo
$ ls -l -G -g --inode
7476869 -rw-rw-r--. 29545 Aug 8 12:21 foo
$ trash example/foo

Dieses Mal wurde eine neue Datei ohne vorherige Berechtigungen erstellt. Das Ergebnis unterliegt vollständig der umask-Einstellung, die kein Berechtigungsbit für den Benutzer und die Gruppe blockiert (das ausführbare Bit wird unabhängig von umask nicht für neue Dateien gewährt), aber es blockiert das Schreibbit (Wert zwei) für andere. Das Ergebnis ist eine Datei mit 664-Berechtigung.

Rsync

Die rsync Der Befehl ist ein robustes Mehrzwecktool zum Senden von Dateien zwischen Hosts und Speicherorten im Dateisystem. Für diesen Befehl stehen viele Optionen zur Verfügung, einschließlich der Fähigkeit, sein Ziel mit seiner Quelle spiegeln zu lassen.

Sie können eine Datei mit rsync kopieren und dann entfernen mit --remove-source-files Option, zusammen mit jeder anderen Option, die Sie wählen, um die Synchronisierung durchzuführen (eine gebräuchliche, universelle Option ist --archive ):

$ rsync --archive --remove-source-files example/foo .
$ ls example
bar  baz
$ ls -lGgi
7476870 -rwxrwxrwx. 1 seth users 29545 Aug 8 12:23 foo

Hier können Sie sehen, dass die Dateiberechtigung und der Besitz beibehalten, der Zeitstempel aktualisiert und die Quelldatei entfernt wurde.

Ein Wort der Warnung: Verwechseln Sie diese Option nicht mit --delete , wodurch Dateien von Ihrem Ziel entfernt werden Verzeichnis. Missbrauch von --delete kann die meisten Ihrer Daten löschen, und es wird empfohlen, diese Option außer in einer Testumgebung zu vermeiden.

Sie können einige dieser Standardeinstellungen überschreiben, indem Sie die Berechtigungs- und Änderungseinstellungen ändern:

$ rsync --chmod=666 --times \
--remove-source-files example/foo .
$ ls example
bar  baz
$ ls -lGgi
7476871 -rw-rw-r--. 1 seth users 29545 Aug 8 12:55 foo

Dabei wird die umask des Ziels respektiert, also --chmod=666 Option führt zu einer Datei mit 664 Berechtigungen.

Die Vorteile gehen jedoch über die Berechtigungen hinaus. Die rsync Der Befehl hat viele nützliche Optionen (nicht zuletzt --exclude -Flag, damit Sie Elemente von einer großen Verschiebungsoperation ausnehmen können), die es zu einem robusteren Werkzeug machen als das einfache mv Befehl. Um beispielsweise alle Sicherungsdateien auszuschließen, während eine Sammlung von Dateien verschoben wird:

$ rsync --chmod=666 --times \
--exclude '*~' \
--remove-source-files example/foo .

Berechtigungen mit install festlegen

Die Installation Der Befehl ist ein Kopierbefehl, der speziell auf Entwickler ausgerichtet ist und meistens als Teil der Installationsroutine beim Kompilieren von Software aufgerufen wird. Es ist unter Benutzern nicht sehr bekannt (und ich frage mich oft, warum es einen so intuitiven Namen hat, der nur Akronyme und Kosenamen für Paketmanager hinterlässt), aber install ist tatsächlich ein nützlicher Weg, um Dateien dort abzulegen, wo Sie sie haben möchten.

Es gibt viele Optionen für die Installation Befehl, einschließlich --backup und --vergleichen Befehl (um zu vermeiden, dass eine neuere Kopie einer Datei "aktualisiert" wird).

Im Gegensatz zu cp und Katze , aber genau wie mv , die Installation Der Befehl kann eine Datei kopieren und dabei ihren Zeitstempel beibehalten:

$ install --preserve-timestamp example/foo .
$ ls -l -G -g --inode
7476869 -rwxr-xr-x. 1 29545 Aug  2 07:28 foo
$ trash example/foo

Hier wurde die Datei in einen neuen Inode kopiert, aber ihre mtime hat sich nicht verändert. Die Berechtigungen waren jedoch auf Installieren gesetzt Standardeinstellung 755 .

Sie können installieren verwenden So legen Sie die Berechtigungen, den Besitzer und die Gruppe der Datei fest:

$ install --preserve-timestamp \
--owner=skenlon \
--group=dialout \
--mode=666 example/foo .
$ ls -li
7476869 -rw-rw-rw-. 1 skenlon dialout 29545 Aug  2 07:28 foo
$ trash example/foo

Verschieben, kopieren und entfernen

Dateien enthalten Daten, und die wirklich wichtigen Dateien enthalten Ihre Daten. Es ist wichtig zu lernen, wie man sie vernünftig verwaltet, und jetzt haben Sie das Toolkit, um sicherzustellen, dass Ihre Daten genau so behandelt werden, wie Sie es möchten.

Haben Sie eine andere Art, Ihre Daten zu verwalten? Teilen Sie uns Ihre Ideen in den Kommentaren mit.


Linux
  1. So konvertieren Sie Dateien in UTF-8-Codierung unter Linux

  2. So extrahieren Sie .gz- und .tar.gz-Dateien unter Linux

  3. Android File Transfer für Linux – Senden Sie Dateien ohne Größenbeschränkung an Linux

  4. Was sind Sparse-Dateien in Linux?

  5. Verschieben einer Datei unter Linux in C

ls-Befehl in Linux zum Auflisten von Dateien

So benennen Sie eine Datei (en) in Linux um

[Bash-Tipps] Dateien umbenennen, ohne zweimal den vollständigen Namen in Linux einzugeben

So finden Sie Dateien basierend auf dem Zeitstempel in Linux

So löschen Sie Dateien, die in einer anderen Datei unter Linux aufgeführt sind

So komprimieren Sie eine Datei unter Linux