Was macht rsync?
Überblick
rsync ist das Standardwerkzeug für effiziente Dateisynchronisation. Es überträgt nur geänderte Teile von Dateien (Delta-Übertragung), unterstützt SSH, behandelt Berechtigungen und eignet sich für Backups, Bereitstellungen und Verzeichnisspiegelungen.
Anleitung
Schritt 1: Grundlegende Verwendung
# Lokale Verzeichnisse synchronisieren
rsync -avz quelle/ ziel/
# -a = Archiv (erhält Berechtigungen, Zeitstempel, Symlinks)
# -v = ausführlich (verbose)
# -z = während der Übertragung komprimieren
# Mit entferntem Server synchronisieren
rsync -avz ./dist/ deploy@server:/var/www/myapp/
# Vom entfernten Server synchronisieren
rsync -avz deploy@server:/var/log/myapp/ ./logs/
# Probelauf (zeigt an, was sich ändern würde, ohne es auszuführen)
rsync -avzn quelle/ ziel/
Schritt 2: Häufige Muster
# Website bereitstellen (Dateien im Ziel löschen, die nicht in der Quelle vorhanden sind)
rsync -avz --delete ./build/ deploy@server:/var/www/site/
# Backup mit Ausschluss
rsync -avz --exclude='node_modules' --exclude='.git' --exclude='.env' \
/opt/myapp/ /backups/myapp/
# Inkrementelles Backup mit harten Links (platzsparend)
rsync -avz --link-dest=/backups/latest \
/opt/myapp/ /backups/$(date +%Y%m%d)/
ln -snf /backups/$(date +%Y%m%d) /backups/latest
# Bandbreitenbegrenzung (nützlich für große Übertragungen)
rsync -avz --bwlimit=5000 quelle/ ziel/ # 5000 KB/s
Schritt 3: Bereitstellungsskript
#!/bin/bash
# scripts/deploy.sh — App mit rsync bereitstellen
SERVER="[email protected]"
REMOTE_DIR="/var/www/myapp"
echo "Erstelle Build..."
npm run build
echo "Synchronisiere Dateien..."
rsync -avz --delete \
--exclude='node_modules' \
--exclude='.env' \
--exclude='.git' \
./dist/ ${SERVER}:${REMOTE_DIR}/
echo "Starte Dienst neu..."
ssh ${SERVER} "sudo systemctl restart myapp"
echo "Bereitstellung abgeschlossen!"
Richtlinien
- Verwenden Sie immer
-n(Probelauf) bei Verwendung von--delete, um versehentlichen Datenverlust zu vermeiden. - Der abschließende Schrägstrich ist wichtig:
quelle/synchronisiert den Inhalt,quellesynchronisiert das Verzeichnis selbst. - Fügen Sie bei großen Übertragungen
--progresshinzu, um den Fortschritt pro Datei zu sehen. - rsync über SSH ist standardmäßig verschlüsselt – sicher für Internetübertragungen.