Linux rsync: Wie man Dateien lokal und über SSH synchronisiert
rsync ist ein Werkzeug, das Dateien und Verzeichnisse auf lokale oder entfernte Systeme kopiert und Änderungen überträgt. Das Standardverhalten besteht darin, in eine Richtung vom Quell- zum Zielort zu kopieren, und Dateien, die nur im Ziel vorhanden sind, werden nicht gelöscht, es sei denn, --delete wird angegeben.
Bevor Sie beginnen
Die Beispiele werden in der Linux-Shell ausgeführt. Überprüfen Sie zunächst mit rsync --version, ob es installiert ist. Unter Ubuntu können Sie es, falls es nicht installiert ist, mit dem folgenden Befehl installieren. Für Fernübertragungen wird auf beiden Systemen rsync benötigt, und bei Verwendung von SSH (Secure Shell) sind auch Fernzugriff und Schreibrechte auf dem Zielpfad erforderlich.
sudo apt update
sudo apt install rsync
Wenn Sie die Quell- und Zielpfade vertauscht eingeben, können Sie die gewünschten Daten überschreiben oder löschen. Bevor Sie wichtige Daten bearbeiten, stellen Sie sicher, dass Sie eine separate Sicherung haben, und überprüfen Sie insbesondere beim Einsatz der Löschoption zuerst die erwarteten Änderungen mit --dry-run. Synchronisation unterscheidet sich von einer Sicherung, die einen früheren Punkt wiederherstellt, da Fehler oder beschädigte Daten in der Quelle auch auf das Ziel übertragen werden können.
Lokale Verzeichniskopie und der Unterschied des Schrägstrichs
Im Folgenden ein Beispiel für das Erstellen eines neuen Übungsordners im Home-Verzeichnis und das Vorbereiten einer Datei. Wenn bereits ein Ordner mit demselben Namen existiert, verwenden Sie einen anderen Namen.
mkdir -p "$HOME/rsync-demo/source" "$HOME/rsync-demo/dest"
printf 'hello\n' > "$HOME/rsync-demo/source/hello.txt"
rsync -av "$HOME/rsync-demo/source/" "$HOME/rsync-demo/dest/"
ls -l "$HOME/rsync-demo/dest/"
Wenn hello.txt im Ergebnis des letzten Befehls erscheint, wurden die Inhalte des Quellverzeichnisses in das Zielverzeichnis kopiert. Das erneute Ausführen desselben rsync-Befehls überträgt normalerweise keine normalen Dateien, die sich nicht geändert haben. Der grundlegende Vergleich verwendet Dateigröße und Änderungszeit, daher ist es keine vollständige Überprüfung, dass die Inhalte identisch sind.
Das / am Ende der Quelle bedeutet, dass die Inhalte im Verzeichnis, nicht das Verzeichnis selbst, in das Ziel kopiert werden. Wenn das Zielverzeichnis bereits existiert und Sie den Schrägstrich weglassen, wird der Name des Quellverzeichnisses unter dem Ziel erstellt.
rsync -av "$HOME/rsync-demo/source" "$HOME/rsync-demo/dest/"
Beim Ausführen dieses Befehls wird dest/source/hello.txt erstellt. Das zuvor erstellte dest/hello.txt bleibt unverändert. Der Unterschied zwischen den beiden Pfaden ist besonders wichtig bei Verwendung der Löschoption. Wenn Leerzeichen im Pfad enthalten sind, setzen Sie ihn in Anführungszeichen wie im Beispiel.
Häufig verwendete Optionen und Vorprüfungen
-a: Dies ist der Archivmodus. Er fordert rekursives Kopieren und die Beibehaltung von Zeit, Berechtigungen, Eigentümer, Gruppe und symbolischen Links an. Die Beibehaltung des Eigentums kann je nach Berechtigungen und Unterstützung des Ziel-Dateisystems eingeschränkt sein. ACLs und erweiterte Attribute sind in-anicht enthalten.-v: Zeigt detaillierte Operationsergebnisse an.-noder--dry-run: Zeigt die erwarteten Operationen an, ohne tatsächlich Änderungen vorzunehmen.-z: Verwendet während der Übertragung Kompression. Die Wirksamkeit variiert je nach Netzwerkbedingungen und Dateitypen und ist nicht immer für lokale Kopien erforderlich.
Beispielsweise können Sie vor dem eigentlichen Kopiervorgang wie folgt prüfen. Die Ausgabe zeigt die erwarteten Änderungen, und wenn sich Dateien zwischen einer Testausführung und der tatsächlichen Ausführung ändern oder Fehler auftreten, kann das tatsächliche Ergebnis abweichen.
rsync -avn "$HOME/rsync-demo/source/" "$HOME/rsync-demo/dest/"
Wenn Sie prüfen müssen, ob Dateien mit derselben Größe und demselben Änderungsdatum tatsächlich unterschiedlichen Inhalt haben, könnten Sie einen --checksum-Vergleich in Betracht ziehen, aber das kann kostspielig sein, da beide Dateien gelesen werden. Für die detaillierte Bedeutung der Optionen siehe offizielle rsync-Handbuch.
Löschen von Dateien, die nur im Ziel vorhanden sind
--delete löscht Elemente aus dem Synchronisationszielverzeichnis, die in der Quelle nicht existieren. Wenn Sie versehentlich das falsche Ziel oder die falsche Verzeichnisebene angeben, können auch notwendige Dateien gelöscht werden. Überprüfen Sie daher zunächst den Zielpfad und den abschließenden Schrägstrich der Quelle und prüfen Sie die Ergebnisse eines Testlaufs.
Das folgende Beispiel kann Elemente auflisten, die nur im Ziel existieren, wie das oben erstellte dest/source/, zur Löschung. Führen Sie es nur aus, wenn keine Dateien im Übungsordner behalten werden müssen.
rsync -avn --delete "$HOME/rsync-demo/source/" "$HOME/rsync-demo/dest/"
Überprüfen Sie die deleting-Einträge in der Ausgabe und entfernen Sie -n nur, um es tatsächlich auszuführen, wenn der Löschbereich korrekt ist und Sicherungen zur Wiederherstellung bereitliegen.
rsync -av --delete "$HOME/rsync-demo/source/" "$HOME/rsync-demo/dest/"
Dieser Befehl ändert nur das Ziel und löscht keine Dateien von der Quelle. Dateien, die nur im Ziel vorhanden waren, können ohne die üblichen Verfahren zur Datenwiederherstellung möglicherweise nicht wiederhergestellt werden. Erstellen Sie separate Versionssicherungen und Überprüfungen der Wiederherstellung für operative Daten.
Dateien oder Verzeichnisse ausschließen
Um das Verzeichnis cache aus der Quelle vom Übertragungsziel auszuschließen, geben Sie es wie folgt an. Da der Inhalt der Quelle die Übertragungswurzel ist, bezieht sich der führende Schrägstrich auf cache in dieser Wurzel. Führen Sie zuerst einen Testlauf durch, um sicherzustellen, dass nur die gewünschten Elemente ausgeschlossen werden.
rsync -avn --exclude='/cache/' "$HOME/rsync-demo/source/" "$HOME/rsync-demo/dest/"
Wenn das Ergebnis korrekt ist, entfernen Sie -n und kopieren Sie es. Die Standard-Ausschlussregel schützt im Allgemeinen die Ausschlusselemente des Ziels in --delete, aber die Verwendung von --delete-excluded oder das Ändern der Filterregeln kann das Verhalten ändern. Überprüfen Sie komplexe Muster in einem separaten Ordner, bevor Sie sie auf tatsächliche Daten anwenden.
Mit einem entfernten Server über SSH synchronisieren
In einer für den SSH-Zugriff vorbereiteten Umgebung sendet der folgende Befehl den Inhalt der lokalen Quelle an das Zielverzeichnis auf dem entfernten Server. Ersetzen Sie user, server.example.com und die Pfade durch tatsächliche Werte und bereiten Sie das entfernte Zielverzeichnis im Voraus vor. Beim ersten Verbindungsaufbau überprüfen Sie den Fingerabdruck des Server-Hostschlüssels über einen vertrauenswürdigen Kanal.
rsync -avn -e ssh "$HOME/rsync-demo/source/" user@server.example.com:/home/user/backup/
Nach Überprüfung der erwarteten Transferliste entfernen Sie -n zum Übertragen. Umgekehrt, um vom Remote-Server auf die lokale Maschine zuzugreifen, setzen Sie den Remote-Pfad als Quellort.
rsync -avn -e ssh user@server.example.com:/home/user/backup/ "$HOME/rsync-demo/dest/"
Wenn der SSH-Port vom Standard abweicht, zum Beispiel, verwenden Sie -e 'ssh -p 2222'. Für den Remote-Zugriff wird empfohlen, ein Konto mit eingeschränkten Berechtigungen und SSH-Schlüsselauthentifizierung zu verwenden. Geben Sie das Passwort nicht direkt im Befehl ein, da es in den Prozessinformationen oder der Shell-Historie sichtbar sein könnte; daher wird das sshpass -p-Beispiel im vorherigen Artikel nicht verwendet. In automatisierten Aufgaben verwalten Sie den Schutz des Schlüssels und den Zugriffsumfang gemeinsam.




