Administratoren (oder normale Benutzer) müssen häufig Dateien sichern oder sie zwischen mehreren Orten (einschließlich lokal und remote) synchron halten, ohne jedes Mal alle Dateien auf dem Ziel zu übertragen und zu überschreiben. Eines der nützlichsten Tools im Gürtel eines Systemadministrators für diese Art von Aufgabe ist rsync
.
Der rsync
Das Tool kann rekursiv durch eine Verzeichnisstruktur navigieren und einen zweiten Speicherort mit neuen/geänderten/entfernten Dateien aktualisieren. Es überprüft, ob Dateien am Ziel vorhanden sind, bevor es sie sendet, wodurch Bandbreite und Zeit für alles, was es überspringt, gespart werden. Auch rsync
bietet die Möglichkeit, eine Verzeichnisstruktur (oder sogar eine einzelne Datei) mit einem anderen Ziel, lokal oder remote, zu synchronisieren. Um dies effizient zu erreichen, überprüft es standardmäßig die Änderungszeiten von Dateien. Es kann auch eine schnelle Hash-Prüfung von Dateien auf der Quelle und dem Ziel durchführen, um festzustellen, ob eine neue Kopie übertragen werden muss oder nicht, was möglicherweise erheblich Zeit und Bandbreite spart.
[ Das könnte Ihnen auch gefallen: 5 erweiterte rsync-Tipps für Linux-Systemadministratoren ]
Da es standardmäßig mit den meisten Linux-Distributionen geliefert wird, sollte es einfach sein, loszulegen. Dies gilt auch für macOS, *BSDs und andere Unix-ähnliche Betriebssysteme. Arbeiten mit rsync
ist einfach und kann auf der Befehlszeile, in Skripten verwendet werden, und einige Tools packen es in eine nette Benutzeroberfläche zum Verwalten von Aufgaben.
Auf der Befehlszeile rsync
wird im Allgemeinen mit einer Handvoll Parametern aufgerufen, um zu definieren, wie es sich verhalten soll, da es sich um ein flexibles Tool handelt. In seiner einfachsten Form rsync
kann angewiesen werden sicherzustellen, dass eine Datei an einem Ort an einem zweiten Ort in einem Dateisystem identisch sein sollte.
Beispiel:
# rsync file1.txt file2.txt
Normalerweise ist es wünschenswert, rsync
zu übergeben ein paar Parameter, um sicherzustellen, dass sich die Dinge so verhalten, wie ein Mensch es erwarten würde. Übergeben von Parametern wie -a
denn „archive“ ist weit verbreitet, da es sich um einen „Meta-Parameter“ handelt, der automatisch eine Handvoll anderer für Sie aufruft. Das -a
entspricht -rlptgoD
, die sich wie folgt aufschlüsseln:
-r
:Verzeichnisse rekursiv durchlaufen (anstatt nur an Dateien im aktuellen Verzeichnis zu arbeiten)-l
:Symlinks als neue Symlinks kopieren-p
:Berechtigungen beibehalten-t
:Änderungszeiten beibehalten-g
:Gruppeneigentum beibehalten-o
:Benutzereigentum beibehalten (das nur Superuser beim Umgang mit Dateien anderer Benutzer vorbehalten ist)-D
:Gerätedateien kopieren
Oft funktioniert dies so, wie es der Nutzer wünscht, und es sind keine wesentlichen Änderungen erforderlich. Einige davon könnten jedoch den Anforderungen eines Nutzers widersprechen, daher könnte es die richtige Antwort sein, sie in die spezifischen Funktionen aufzuschlüsseln.
Weitere bemerkenswerte Optionen sind:
-n
:Führen Sie den Befehl trocken aus, ohne Dateien zu übertragen--list-only
:Nur die Liste der Dateien anzeigen, diersync
übertragen würde-P
:Fortschritt pro Datei anzeigen-v
:Gesamtfortschritt anzeigen und Informationen zu jeder Datei ausgeben, wenn sie abgeschlossen ist-u
:Aktualisierung der Zieldateien überspringen, wenn sie neuer als die Quelle sind-q
:Ruhemodus. Nützlich für die Aufnahme in Skripts, wenn die Terminalausgabe nicht erforderlich ist-c
:Verwenden Sie einen Prüfsummenwert, um zu bestimmen, welche Dateien übersprungen werden sollen, anstatt die Änderungszeit und -größe--existing
:Nur Dateien aktualisieren, aber keine neuen erstellen, die fehlen--files-from=FILE
:Listenquelldateien aus einer Textdatei lesen--exclude=PATTERN
:Verwenden Sie MUSTER, um Dateien von der Synchronisierung auszuschließen--exclude-from=FILE
:Wie oben, aber aus einer Datei gelesen--include=PATTERN
:Wird auch verwendet, um die Ausschlussregeln zu negieren--include-from=FILE
:Wie oben, aber aus einer Datei gelesen
Mein persönlicher Standardsatz von Parametern für rsync
am Ende -avuP
sein (Archivieren, ausführliche Ausgabe, nur neue Dateien aktualisieren und den Fortschritt der durchgeführten Arbeit anzeigen).
Quelle und Ziele
Quelle und Ziel der Synchronisierung sind Dateien und Verzeichnisse. Auch rsync
bietet die Funktionalität zur Interaktion mit Remote-Systemen über SSH, wodurch der Benutzer keine Netzwerkfreigaben einrichten muss, um Dateien von einem Ort zum anderen synchronisieren zu können. Das bedeutet, dass Sie rsync
einfach skripten können Jobs nach der Konfiguration von SSH-Schlüsseln an beiden Enden, wodurch die Notwendigkeit entfällt, sich für die Remote-Dateisynchronisierung manuell anzumelden.
Beispiel:
Hier die Syntax aufschlüsseln:
- Ausführen von
rsync
Befehl - Mit dem
-avuP
oben beschriebenen Parameter - Zum Kopieren des lokalen Dokumentenverzeichnisses
- Mit steve als Benutzer auf dem entfernten System
- Wo das entfernte System Dateiserver genannt wird und ist unter diesem Namen erreichbar
- Und der relative Pfad von Steves Zuhause wird nach : angezeigt - und in diesem Fall bedeutet es, dies in Steves Home-Verzeichnis selbst zu legen
Dadurch wird alles aus Steves Ordner „Dokumente“ in das Verzeichnis „Dokumente“ auf dem Remote-System kopiert, wobei nur Dateien aktualisiert werden, die sich geändert haben oder neu sind. Einmaliges Ausführen ist ausreichend (bis es neue Änderungen gibt). Wenn Sie es unmittelbar danach erneut ausführen, sollte es relativ dieselbe Ausgabemenge erzeugen, aber viel schneller sein, da alle Dateien übersprungen werden.
[ Das API-Eigentümerhandbuch:7 Best Practices effektiver API-Programme ]
Abschluss
Es gibt viele nützliche Möglichkeiten, die Leistungsfähigkeit von rsync
zu nutzen . Es ist oft so einfach, es einmalig über die Befehlszeile auszuführen, um eine Reihe von Dateien zu kopieren, ohne sich Gedanken über das Kopieren von bereits am Ziel vorhandenen Dingen machen zu müssen. Erstellen Sie ein Skript und fügen Sie es zu cron
hinzu Jobs, und das Experimentieren mit verschiedenen Parametern hilft dem durchschnittlichen Systemadministrator, noch mehr Ziele zu erreichen.