Rsync (Remote Sync) ist der am häufigsten verwendete Befehl zum Kopieren und Synchronisieren von Dateien und Verzeichnissen remote sowie lokal in Linux/Unix-Systemen.
Mit Hilfe des rsync-Befehls können Sie Ihre Daten remote und lokal über Verzeichnisse, Laufwerke und Netzwerke kopieren und synchronisieren, Datensicherungen durchführen und zwischen zwei Linux-Maschinen spiegeln.
In diesem Artikel werden 16 grundlegende und erweiterte Verwendungsmöglichkeiten des rsync-Befehls erläutert, um Ihre Dateien remote und lokal auf Linux-basierten Maschinen zu übertragen. Sie müssen kein root-Benutzer sein, um den rsync-Befehl auszuführen.
Inhaltsverzeichnis
Vorteile des Rsync-Befehls
Er bietet mehrere Vorteile, darunter:
- Effiziente Dateiübertragung – rsync verwendet einen Delta-Übertragungsalgorithmus, was bedeutet, dass es nur die Unterschiede zwischen Quell- und Zieldateien überträgt, was die übertragene Datenmenge erheblich reduziert und es effizient für die Synchronisierung großer Dateien oder Verzeichnisse macht.
- Remote-Dateisynchronisation – rsync unterstützt sowohl lokale als auch entfernte Dateiübertragungen über SSH, was die Synchronisierung zwischen lokalen und entfernten Systemen oder das Spiegeln von Verzeichnissen über mehrere Maschinen hinweg ermöglicht.
- Inkrementelle Backups – rsync ist gut geeignet für inkrementelle Backups, da es Backups effizient erstellt und aktualisiert, indem es nur neue oder modifizierte Dateien überträgt.
- Dateiberechtigungen beibehalten – rsync kann verschiedene Dateiattribute wie Berechtigungen, Eigentümerschaft, Zeitstempel und symbolische Links erhalten, was sicherstellt, dass die kopierten Dateien ihre ursprünglichen Merkmale auf dem Ziel behalten.
- Bandbreitensteuerung – rsync ermöglicht es Ihnen, die Bandbreitennutzung während Dateiübertragungen zu begrenzen, da es beim Senden und Empfangen von Daten auf beiden Seiten Kompressions- und Dekompressionsmethoden verwendet.
- Schneller – rsync kann schneller sein als scp (Secure Copy) für Dateiübertragungen, insbesondere beim Synchronisieren großer Verzeichnisse oder beim Umgang mit Dateien, die bereits teilweise übertragen wurden oder auf dem Ziel vorhanden sind.
Rsync-Befehlssyntax
Der rsync-Befehl folgt der folgenden Syntax:
# rsync [OPTIONS] SOURCE DESTINATION
Hier ist eine Erklärung der verschiedenen Komponenten und Optionen, die mit rsync-Befehlen verwendet werden:
-v
– Ausführliche Ausgabe, die detaillierte Informationen über die Übertragung anzeigt.-r
– Kopiert Daten rekursiv (erhält jedoch beim Übertragen von Daten keine Zeitstempel und Berechtigungen).-a
– Archivmodus, der das rekursive Kopieren von Dateien ermöglicht und auch symbolische Links, Dateiberechtigungen, Benutzer- & Gruppenbesitz sowie Zeitstempel erhält.-z
– Komprimiert Dateien während der Übertragung, um die Netzwerknutzung zu reduzieren.-h
– Menschlich lesbar, Ausgabe von Zahlen in einem menschlich lesbaren Format.-P
– Zeigt den Fortschritt während der Übertragung an.QUELLE
– Gibt die Quelldatei(en) oder das Verzeichnis an, das übertragen werden soll, was ein lokaler oder ein entfernter Speicherort sein kann.ZIEL
– Gibt den Zielpfad an, wohin die Dateien oder Verzeichnisse kopiert werden sollen. Ähnlich wie die Quelle kann es sich um einen lokalen Pfad oder einen entfernten Speicherort handeln.
Installieren Sie Rsync im Linux-System
Wir können das Rsync-Paket mithilfe des folgenden Paketmanagers entsprechend Ihrer Linux-Distribution installieren.
$ sudo apt install rsync [On Debian, Ubuntu and Mint] $ sudo yum install rsync [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] $ sudo emerge -a sys-apps/rsync [On Gentoo Linux] $ sudo apk add rsync [On Alpine Linux] $ sudo pacman -S rsync [On Arch Linux] $ sudo zypper install rsync [On OpenSUSE]
1. Datei lokal kopieren/synchronisieren
Um eine Datei lokal zu kopieren oder zu synchronisieren, können Sie den folgenden Befehl verwenden, der eine einzelne Datei auf einem lokalen Rechner von einem Ort zu einem anderen synchronisiert.
Hier in diesem Beispiel muss eine Datei namens backup.tar in den /tmp/backups/-Ordner kopiert oder synchronisiert werden.
[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/ created directory /tmp/backups backup.tar.gz sent 224.54K bytes received 70 bytes 449.21K bytes/sec total size is 224.40K speedup is 1.00
In dem obigen Beispiel können Sie sehen, dass Rsync automatisch ein Verzeichnis für das Ziel erstellt, wenn das Ziel noch nicht vorhanden ist.

2. Verzeichnis lokal kopieren/synchronisieren
Der folgende Befehl überträgt oder synchronisiert alle Dateien von einem Verzeichnis in ein anderes Verzeichnis auf demselben Rechner.
Hier in diesem Beispiel enthält /root/rpmpkgs einige RPM-Paketdateien, und Sie möchten, dass dieses Verzeichnis im Ordner /tmp/backups/ kopiert wird.
[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/ sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.47M bytes received 96 bytes 2.32M bytes/sec total size is 3.74M speedup is 1.08

3. Verzeichnis von lokalem auf Remote-Server kopieren
Um ein Verzeichnis von einem lokalen Server auf einen Remote-Server zu kopieren, können Sie den folgenden Befehl verwenden, der ein Verzeichnis von einem lokalen auf einen Remote-Rechner synchronisiert.
Zum Beispiel, wenn es einen Ordner auf Ihrem lokalen Computer namens „rpmpkgs“ gibt, der einige RPM-Pakete enthält und wenn Sie möchten, dass der Inhalt dieses lokalen Verzeichnisses an einen Remote-Server gesendet wird, können Sie den folgenden Befehl verwenden.
# rsync -avzh /root/rpmpkgs [email protected]:/root/ The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established. ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts. [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.74M bytes received 96 bytes 439.88K bytes/sec total size is 3.74M speedup is 1.00

4. Verzeichnis vom Remote- auf den lokalen Server kopieren
Dieser Befehl hilft Ihnen, ein Remote-Verzeichnis mit einem lokalen Verzeichnis zu synchronisieren. Hier in diesem Beispiel wird ein Verzeichnis /root/rpmpkgs, das sich auf einem Remote-Server befindet, in Ihren lokalen Computer in /tmp/myrpms kopiert.
# rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms [email protected]'s password: receiving incremental file list created directory /tmp/myrpms rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 104 bytes received 3.49M bytes 997.68K bytes/sec total size is 3.74M speedup is 1.07

5. Rsync über SSH
Mit rsync können wir SSH (Secure Shell) für den Datentransfer verwenden, wobei das SSH-Protokoll verwendet wird. Beim Übertragen unserer Daten können Sie sicher sein, dass Ihre Daten in einer gesicherten Verbindung mit Verschlüsselung übertragen werden, sodass niemand Ihre Daten lesen kann, während sie über das Internet übertragen werden.
Außerdem müssen wir beim Verwenden von rsync das Benutzer/Root-Passwort angeben, um diese bestimmte Aufgabe zu erledigen. Durch Verwendung der SSH-Option werden Ihre Anmeldungen auf verschlüsselte Weise gesendet, sodass Ihr Passwort sicher ist.
Um rsync über SSH zu verwenden, können Sie die Option -e
verwenden, um den Remote-Shell-Befehl anzugeben, der in der Regel ssh ist, wie gezeigt.
# rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
6. Kopieren einer Datei von einem Remote-Server auf einen lokalen Server mit SSH
Um eine Datei von einem Remote-Server auf einen lokalen Server zu synchronisieren, können Sie ein Protokoll mit rsync unter Verwendung der Option „-e“ mit dem gewünschten Protokollnamen angeben.
Hier in diesem Beispiel werden wir „ssh“ mit der Option „-e“ verwenden und den Datentransfer durchführen.
# rsync -avzhe ssh [email protected]:/root/anaconda-ks.cfg /tmp [email protected]'s password: receiving incremental file list anaconda-ks.cfg sent 43 bytes received 1.10K bytes 325.43 bytes/sec total size is 1.90K speedup is 1.67

7. Kopieren Sie eine Datei von einem lokalen Server auf einen entfernten Server mit SSH
Um eine Datei von einem lokalen Server auf einen entfernten Server mit SSH zu synchronisieren, können Sie den folgenden Befehl verwenden, wie gezeigt.
# rsync -avzhe ssh backup.tar.gz [email protected]:/backups/ [email protected]'s password: sending incremental file list created directory /backups backup.tar.gz sent 224.59K bytes received 66 bytes 64.19K bytes/sec total size is 224.40K speedup is 1.00

8. Fortschritt beim Übertragen von Daten mit Rsync anzeigen
Um den Fortschritt beim Übertragen von Daten von einer Maschine zu einer anderen anzuzeigen, können wir die Option ‚--progress'
verwenden, die die Dateien und die verbleibende Zeit bis zum Abschluss der Übertragung anzeigt.
# rsync -avzhe ssh --progress /root/rpmpkgs [email protected]:/root/rpmpkgs [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5) rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5) rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm 2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5) rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm 120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5) sent 3.74M bytes received 96 bytes 1.50M bytes/sec total size is 3.74M speedup is 1.00

9. Dateien mit bestimmter Erweiterung mit Rsync einbeziehen
Um bestimmte Dateien oder Muster während einer Rsync-Operation einzuschließen, können Sie die Option --include
mit einer Erweiterung verwenden, die alle Dateien übereinstimmt.
# rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/
In dem bereitgestellten Beispiel werden von rsync nur Dateien mit der Erweiterung .txt
aus dem Verzeichnis /Pfad/zur/Quelle/ während der Übertragung einbezogen.
10. Dateien mit bestimmter Erweiterung mit Rsync ausschließen
Ebenso können Sie während einer Rsync-Operation eine bestimmte Erweiterung ausschließen, indem Sie die Option --exclude
mit einem Platzhaltermuster verwenden.
# rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/
Bei der Übertragung wird rsync Dateien mit der angegebenen Erweiterung (*.ext) ausschließen, während alle anderen Dateien und Verzeichnisse eingeschlossen werden.
11. Ein- und Ausschließen von Dateien mit Rsync
Um bestimmte Dateien oder Muster während einer rsync-Operation einzuschließen und auszuschließen, können Sie sowohl die Optionen –include als auch –exclude mit entsprechenden Platzhaltermustern verwenden.
Diese beiden Optionen ermöglichen es uns, Dateien einzuschließen und auszuschließen, indem wir Parameter angeben. Diese Optionen helfen uns dabei, diejenigen Dateien oder Verzeichnisse anzugeben, die Sie bei der Synchronisierung einschließen möchten, und Dateien und Ordner auszuschließen, die nicht übertragen werden sollen.
Hier in diesem Beispiel wird der rsync-Befehl nur diejenigen Dateien und Verzeichnisse einschließen, die mit ‚R‘ beginnen, und alle anderen Dateien und Verzeichnisse ausschließen.
# rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm

12. Verwendung der Option –delete mit Rsync
Wenn eine Datei oder ein Verzeichnis am Quellort nicht existiert, aber am Zielort bereits vorhanden ist, möchten Sie möglicherweise diese vorhandene Datei/dieses Verzeichnis beim Synchronisieren löschen.
Wir können die Option ‚–delete‘ verwenden, um Dateien zu löschen, die im Quellverzeichnis nicht vorhanden sind.
Die Quelle und das Ziel sind synchron. Erstellen Sie nun eine neue Datei test.txt am Zielort.
[root@tecmint:~]# cd /root/rpm/ [root@tecmint:~/rpm]# touch test.txt [root@tecmint:~/rpm]# rsync -avz --delete [email protected]:/var/lib/rpm/ /root/rpm/ [email protected]'s password: receiving incremental file list deleting test.txt ./ .dbenv.lock .rpm.lock Basenames Conflictname Dirnames Enhancename Filetriggername Group Installtid Name Obsoletename Packages Providename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.001 __db.002 __db.003 sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec total size is 71,151,616 speedup is 3.84
Das Ziel hat die neue Datei namens test.txt, als es mit der Quelle synchronisiert wurde, wurde die Datei test.txt mit der Option ‚--delete
‚ entfernt.

13. Setzen Sie die Dateiübertragungsgrenze mit Rsync
Sie können die maximale Dateigröße angeben, die übertragen oder synchronisiert werden soll. Sie können dies mit der Option „--max-size
“ tun. Hier in diesem Beispiel beträgt die maximale Dateigröße 200k, daher überträgt dieser Befehl nur Dateien, die gleich oder kleiner als 200k sind.
# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email protected]:/root/tmprpm [email protected]'s password: sending incremental file list created directory /root/tmprpm ./ .dbenv.lock .rpm.lock Conflictname Enhancename Filetriggername Group Installtid Name Obsoletename Recommendname Requirename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.002 sent 129.52K bytes received 396 bytes 28.87K bytes/sec total size is 71.15M speedup is 547.66

14. Löschen Sie Quelldateien automatisch nach der Übertragung
Angenommen, Sie haben den Haupt-Webserver und einen Datensicherungsserver, Sie haben ein tägliches Backup erstellt und es mit Ihrem Sicherungsserver synchronisiert, aber jetzt möchten Sie diese lokale Kopie des Backups nicht auf Ihrem Webserver behalten.
Warten Sie also darauf, dass die Übertragung abgeschlossen ist, und löschen Sie dann diese lokale Sicherungsdatei manuell? Natürlich NICHT. Diese automatische Löschung kann mit der Option ‚--remove-source-files
‚ erfolgen.
# rsync --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 795 bytes received 2.33K bytes 894.29 bytes/sec total size is 267.30K speedup is 85.40 [root@tecmint:~]# ls -l backup.tar.gz ls: cannot access 'backup.tar.gz': No such file or directory

15. Führen Sie eine Testausführung mit Rsync durch
Wenn Sie ein Anfänger sind, der rsync verwendet und nicht genau weiß, was Ihr Befehl tun wird. Rsync könnte wirklich die Dinge in Ihrem Zielordner durcheinander bringen, und dann kann das Rückgängigmachen eine mühsame Arbeit sein.
# rsync --dry-run --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 50 bytes received 19 bytes 19.71 bytes/sec total size is 267.30K speedup is 3,873.97 (DRY RUN)

16. Rsync Set Bandbreitenbegrenzung und Dateiübertragung
Sie können die Bandbreitenbegrenzung beim Übertragen von Daten von einer Maschine auf eine andere mit Hilfe der Option „--bwlimit
“ festlegen. Diese Option hilft uns, die I/O-Bandbreite zu begrenzen.
# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ [email protected]:/root/tmprpm/ [email protected]'s password: sending incremental file list sent 324 bytes received 12 bytes 61.09 bytes/sec total size is 38.08M speedup is 113347.05
Außerdem synchronisiert rsync standardmäßig nur geänderte Blöcke und Bytes. Wenn Sie explizit die gesamte Datei synchronisieren möchten, verwenden Sie die Option „-W“ damit.
# rsync -zvhW backup.tar /tmp/backups/backup.tar backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10
Abschluss
Damit schließen wir unseren Überblick über rsync und seine Fähigkeiten ab. Für weitere Erkundungen seiner umfangreichen Optionen und Funktionalitäten empfehle ich Ihnen, die umfassenden Handbuchseiten (man pages) zu konsultieren.
Source:
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/