rsync Linux: Befehl, Optionen und Beispiele

Affiliate-Hinweis v3.1
Affiliate-Hinweis v3.2 (mobil)
TestumgebungRHEL-FamilieAlmaLinux 9.8root-KontoGeprüft am 2026-10-07

Kopierst du jedes Mal den ganzen Ordner neu, um zwei Server abzugleichen, ist die Übertragung so groß wie der ganze Ordner, auch wenn sich nur eine Datei geändert hat. Der rsync-Befehl, kurz für remote sync, vergleicht Quelle und Ziel und überträgt nur die Dateien, die sich unterscheiden; das funktioniert zwischen lokalen Ordnern genauso wie zwischen Servern, die per SSH verbunden sind. Dieser Beitrag zeigt die Grundlagen, die Optionen und Beispiele für die beiden Verbindungsarten SSH und rsync-Daemon.

Die Ausgaben in diesem Beitrag stammen von rsync 3.2.7 unter AlmaLinux 9.8. Ist rsync nicht installiert, installierst du es mit dem Paketmanager.

# RHEL-Familie
dnf -y install rsync
# Debian-Familie
apt -y install rsync

✅ Grundlegende Verwendung

Die grundlegende Syntax sieht so aus.

rsync -Optionen Quelle Ziel

cp-Befehl: Wie dort schreibst du zuerst die Quelle und dahinter das Ziel. Hängst du an die Quelle einen Schrägstrich [/] an, landet nur der Inhalt des Ordners im Ziel; ohne ihn kommt der Ordner selbst hinein.

~]# rsync -av www/ backup/
sending incremental file list
index.html
img/
img/logo.png
~]# rsync -av www backup/
sending incremental file list
www/
www/index.html
www/img/
www/img/logo.png

Führst du denselben Befehl noch einmal aus, ist die Dateiliste leer, und die gesendeten Bytes (sent) fallen auf einige Hundert. Dateien mit gleicher Größe und gleicher Änderungszeit werden übersprungen.

~]# rsync -av www/ backup/
sending incremental file list

sent 166 bytes  received 13 bytes  358.00 bytes/sec
total size is 3,015  speedup is 16.84

Mit -r allein ohne -a bleiben die Änderungszeiten nicht erhalten, und beim nächsten Lauf werden dieselben Dateien erneut gesendet. Beim Synchronisieren von Ordnern ist -a deshalb der Standard.

Die Option -n zeigt nur, welche Dateien sich ändern würden, ohne etwas zu übertragen, und am Ende der Ausgabe steht [(DRY RUN)]. Optionen, die Dateien im Ziel löschen, wie -⁠-delete, prüfst du zuerst mit -n und führst sie dann richtig aus.

~]# rsync -avn --delete www/ backup/
sending incremental file list
deleting old.bak
index.html

sent 188 bytes  received 39 bytes  454.00 bytes/sec
total size is 3,013  speedup is 13.27 (DRY RUN)

✅ Optionen des rsync-Befehls & Simulator

OptionBeschreibung
-a--archiveKopiert auch Unterverzeichnisse und erhält Rechte, Eigentümer, Änderungszeit und symbolische Links (entspricht -rlptgoD)
-v--verboseGibt die Namen der übertragenen Dateien und die Übertragungsmenge aus
-z--compressKomprimiert die Dateidaten während der Übertragung
-r--recursiveKopiert auch Unterverzeichnisse (in -a enthalten)
-t--timesErhält die Änderungszeit (in -a enthalten). Danach richtet sich, welche Dateien beim nächsten Lauf übersprungen werden
-n--dry-runZeigt ohne Übertragung nur die Dateien, die sich ändern würden, und markiert das Ende mit (DRY RUN)
-u--updateÜberspringt Dateien, die im Ziel neuer sind
-h--human-readableGibt Byte-Zahlen in K, M und G aus
-PEntspricht --partial --progress. Zeigt den Fortschritt je Datei und setzt abgebrochene Übertragungen fort
-i--itemize-changesZeigt die Änderungen jeder Datei als Kürzel>f+++++++++ neue Datei · >f.st.⁠.⁠.⁠.⁠.⁠. Größe und Zeit geändert · *deleting gelöscht
-e--rsh=COMMANDLegt die Remote-Shell fest-e 'ssh -p 2222 -i /root/.ssh/key.pem'
--deleteLöscht im Ziel Dateien, die es in der Quelle nicht gibt (braucht -r oder -a)
--exclude=PATTERNSchließt Dateien und Verzeichnisse aus, die zum Muster passen--exclude '*.tmp' --exclude 'cache/'
--include=PATTERNVor --exclude gesetzt, nimmt nur dieses Muster vom Ausschluss aus
--max-size=SIZEÜberträgt keine Dateien, die größer als die angegebene Größe sind (--min-size für kleinere Dateien)--max-size=3M --min-size=10k
--bwlimit=RATEBegrenzt die Übertragungsgeschwindigkeit, Einheit KiB/s
--statsGibt Statistiken zu Dateizahl und Übertragungsmenge aus
rsync-Befehle-Simulatorrsync 3.2.7
[root@server work]#
Läuft nur in deinem Browser und berührt keine echten Dateien. Der Ordner www ist die Quelle, der Ordner backup das letzte Backup; tipp rsync mit verschiedenen Optionen und prüf das Ergebnis mit ll, cat und diff. Remote-Adressen (user@host:Pfad) werden nur als Syntax angenommen, eine Verbindung gibt es nicht. Mit [Von vorn] setzt du alle Änderungen zurück. Mit ↑↓ auf der Tastatur holst du frühere Befehle zurück, und mit uknew help siehst du, welche Befehle es gibt.

✅ Verbindungsarten: SSH und rsync-Daemon

Für die Synchronisation mit einem entfernten Server gibt es zwei Verbindungsarten. Ein einzelner Doppelpunkt [:] nach dem Host läuft über SSH, ein doppelter Doppelpunkt [::] verbindet direkt mit dem rsync-Daemon auf Port 873.

ArtPer SSH (:)Per rsync-Daemon (::)
Syntaxrsync -Optionen user@host:/Pfad /lokaler/Pfadrsync -Optionen host::Modul/Pfad /lokaler/Pfad
PortSSH-Port (Standard 22)873
VerschlüsselungPer SSH verschlüsseltKeine Verschlüsselung
AuthentifizierungSSH-Schlüssel oder Passworthosts allow in rsyncd.conf, optional Konto und Passwort
Einrichtung auf dem ServerKeine (funktioniert, sobald SSH-Zugang besteht)rsync-daemon installieren, /etc/rsyncd.conf, Port 873 öffnen
EinsatzBackup und Deployment zwischen Servern (Standardwahl)Spiegelung im internen Netz, ohne SSH-Konten herauszugeben

🔲 Per SSH

Erreichst du den Server per SSH, kannst du rsync ohne Einrichtung auf dem Server sofort nutzen. Bei einem anderen Port oder einer Schlüsseldatei setzt du den ssh-Befehl unverändert in die Option -e.

# lokal → entfernt
rsync -avz /home/2server_data/ root@192.168.45.239:/home/1server_data/
# entfernt → lokal
rsync -avz root@192.168.45.239:/home/1server_data/html_Remote /home/2server_data
# SSH-Port und Schlüsseldatei
rsync -avz -e 'ssh -p 2222 -i /root/.ssh/key.pem' root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync-Befehl: Ergebnis von entfernt nach lokal

Um bestimmte Dateien oder Verzeichnisse auszulassen, hängst du -⁠-exclude für jedes Muster einzeln an oder fasst die Muster in geschweiften Klammern zusammen.

rsync -avz --exclude 'html_Remote_Excertion' --exclude 'Exception_File' root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync -avz --exclude={'html_Remote_excertion/*','Exception_File'} root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync-Befehl: von entfernt nach lokal, bestimmte Dateien und Verzeichnisse ausgeschlossen

🔲 Per rsync-Daemon

Der rsync-Daemon erlaubt den Zugriff je Modul über Port 873 ohne SSH-Konto. Die Verbindung ist nicht verschlüsselt, daher nutzt man ihn zwischen Servern im selben internen Netz.

Unter AlmaLinux 9 installierst du das Paket rsync-daemon und startest den Dienst. Auf Servern mit firewalld öffnest du Port 873, bei Cloud-Servern in der Firewall der Konsole. Das unter RHEL 8 und älter genutzte xinetd gibt es in Version 9 nicht mehr.

dnf -y install rsync-daemon
systemctl enable --now rsyncd
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reload

In der Konfigurationsdatei [/etc/rsyncd.conf] trägst du Modulname, Pfad und erlaubte Hosts ein. Mit read only = yes können entfernte Clients nur herunterladen.

[myhome]
path = /home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.45.182
max connections = 3
timeout = 30

Schreibst du entfernt nur zwei Doppelpunkte nach dem Host, erscheint die Modulliste; mit dem Modulnamen erscheint die Dateiliste darin.

~]# rsync 192.168.45.239::
myhome
home
~]# rsync 192.168.45.239::myhome
drwxr-xr-x          4,096 2025/06/12 22:14:39 .
drwxr-xr-x          4,096 2025/06/12 22:21:10 1server_data
drwxr-xr-x          4,096 2025/06/12 22:14:39 2server_data

Kopiert wird im Format [Host::Modul/Pfad]. -⁠-delete löscht im Ziel Dateien, die es in der Quelle nicht gibt, und -⁠-include nimmt nur die Einträge vom Ausschluss aus, die vor -⁠-exclude stehen.

~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
./
Exception_File
html_Remote/
html_Remote_Excertion/

sent 58 bytes  received 332 bytes  780.00 bytes/sec
total size is 442  speedup is 1.13
~]# rsync -avz --delete 192.168.45.239::myhome/1server_data/ /home/2server_data/
~]# rsync -avz --include '*.html' --exclude 'exclude.txt' 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync-Befehl: von entfernt nach lokal mit der Option delete
rsync-Befehl: von entfernt nach lokal mit den Optionen delete, include und exclude

Auf einem Server mit aktivem SELinux kann der Zugriff auf den Modulpfad mit [Permission denied (13)] blockiert werden. Im Test ging es durch, nachdem SELinux mit [setenforce 0] abgeschaltet war.

~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
rsync: change_dir "/1server_data" (in myhome) failed: Permission denied (13)
sent 8 bytes  received 90 bytes  65.33 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1658) [Receiver=3.1.2]

-⁠-bwlimit begrenzt die Übertragungsgeschwindigkeit in KiB/s, und mit -P siehst du dazu den Fortschritt jeder Datei. -⁠-max-size und -⁠-min-size übertragen nur Dateien im angegebenen Größenbereich.

rsync -avzP --bwlimit=100 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync -avz --max-size='3M' --min-size='10k' 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync-Befehl: von entfernt nach lokal, Bandbreite auf 100 kb begrenzt und Fortschritt mit -P

ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Beweisen Sie, dass Sie ein Mensch sind: 2   +   9   =