Sichere Synchronisierung von Dateien mit rsync
In diesem Schritt lernen Sie, wie Sie Dateien zwischen Systemen mit dem Befehl rsync
synchronisieren. rsync
ist ein leistungsstarkes und vielseitiges Werkzeug zum Kopieren und Synchronisieren von Dateien und Verzeichnissen, lokal und remote. Sein Hauptvorteil ist die Fähigkeit, nur die Unterschiede zwischen Dateien zu übertragen, was es sehr effizient für Aktualisierungen macht. Wie sftp
kann rsync
SSH für sichere, verschlüsselte Übertragungen verwenden.
Die häufigsten Optionen für rsync
umfassen:
-a
oder --archive
: Dies ist eine Kombination aus mehreren Optionen (-rlptgoD
), die die meisten Dateiattribute (rekursiv, Links, Berechtigungen, Zeiten, Gruppe, Besitzer, Geräte-Dateien) beibehält. Es wird oft als "Archivmodus" bezeichnet und ist für die meisten Synchronisierungsaufgaben sehr empfehlenswert.
-v
oder --verbose
: Erhöht die Detailgenauigkeit und zeigt mehr Informationen über die Übertragung an.
-z
oder --compress
: Komprimiert die Dateiinformationen während der Übertragung, was die Übertragungsgeschwindigkeit bei langsamen Verbindungen erhöhen kann.
-h
oder --human-readable
: Gibt Zahlen in einem menschenlesbaren Format aus.
-n
oder --dry-run
: Führt einen Testlauf aus, ohne Änderungen vorzunehmen. Dies ist äußerst nützlich, um zu überprüfen, was rsync
tun wird, bevor der Befehl tatsächlich ausgeführt wird.
Beginnen wir damit, sicherzustellen, dass Sie sich in Ihrem Verzeichnis ~/project
befinden.
cd ~/project
Wir simulieren ein Synchronisierungsszenario, indem wir ein Quelldatei- und ein Zielverzeichnis erstellen.
Erstellen Sie ein Quelldatei-Verzeichnis source_dir
mit einigen Dateien:
mkdir source_dir
echo "Inhalt von DateiA" > source_dir/fileA.txt
echo "Inhalt von DateiB" > source_dir/fileB.txt
mkdir source_dir/subdir
echo "Inhalt von Unterdatei1" > source_dir/subdir/subfile1.txt
Erstellen Sie ein leeres Zielverzeichnis dest_dir
:
mkdir dest_dir
Führen wir nun einen Trockenlauf aus, um zu sehen, was rsync
tun würde, wenn es source_dir
mit dest_dir
synchronisiert. Wir verwenden die Optionen -avh
für Archivmodus, ausführliche Ausgabe und menschenlesbare Größen sowie -n
für den Trockenlauf.
rsync -avhn source_dir/ dest_dir/
Wichtiger Hinweis zu den nachgestellten Schrägstrichen:
source_dir/
: Der nachgestellte Schrägstrich bedeutet, dass der Inhalt von source_dir
kopiert wird.
source_dir
: Ohne nachgestellten Schrägstrich bedeutet dies, dass source_dir
selbst in das Zielverzeichnis kopiert wird.
Die Ausgabe des Trockenlaufs zeigt Ihnen die Dateien an, die übertragen würden:
sending incremental file list
./
fileA.txt
fileB.txt
subdir/
subdir/subfile1.txt
sent 186 bytes received 12 bytes 396.00 bytes/sec
total size is 66 speedup is 0.33 (DRY RUN)
Beachten Sie das (DRY RUN)
am Ende, was anzeigt, dass keine tatsächlichen Änderungen vorgenommen wurden.
Führen wir nun die tatsächliche Synchronisierung durch. Entfernen Sie die Option -n
.
rsync -avh source_dir/ dest_dir/
Die Ausgabe ist ähnlich wie beim Trockenlauf, aber ohne die Kennzeichnung (DRY RUN)
:
sending incremental file list
./
fileA.txt
fileB.txt
subdir/
subdir/subfile1.txt
sent 186 bytes received 12 bytes 396.00 bytes/sec
total size is 66 speedup is 0.33
Überprüfen Sie, ob die Dateien in dest_dir
kopiert wurden:
ls -R dest_dir
Sie sollten sehen:
dest_dir:
fileA.txt fileB.txt subdir
dest_dir/subdir:
subfile1.txt
Ändern wir nun eine Datei in source_dir
und fügen eine neue Datei hinzu, um die Effizienz von rsync
zu sehen.
echo "Aktualisierter Inhalt für DateiA" > source_dir/fileA.txt
echo "Neuer Dateiinhalt" > source_dir/new_file.txt
Führen Sie einen weiteren Trockenlauf aus, um zu sehen, welche Dateien rsync
diesmal übertragen würde:
rsync -avhn source_dir/ dest_dir/
Die Ausgabe zeigt nur die geänderten und neuen Dateien an:
sending incremental file list
./
fileA.txt
new_file.txt
sent 128 bytes received 12 bytes 280.00 bytes/sec
total size is 100 speedup is 0.71 (DRY RUN)
Dies demonstriert die Fähigkeit von rsync
, nur die Unterschiede zu übertragen.
Führen Sie nun erneut die tatsächliche Synchronisierung durch:
rsync -avh source_dir/ dest_dir/
Überprüfen Sie erneut den Inhalt von dest_dir
:
ls -R dest_dir
cat dest_dir/fileA.txt
cat dest_dir/new_file.txt
Sie sollten new_file.txt
in dest_dir
sehen und fileA.txt
sollte "Aktualisierter Inhalt für DateiA" enthalten.