用法 示例 :rsync -zavP --delete --exclude = .svn --exclude = .git --exclude = .gitignore --exclude = *. Log --exclude = .gitattributes --exclude = storage / data / www / vhosts / fotophireapi.wondershare.com / [email protected] :: apache / data / www / vhosts / fotophireapi.wondershare.com /
1. Einleitung
rsync ist eine häufig verwendete Linux-Anwendung für die Dateisynchronisierung.
Es kann Dateien zwischen einem lokalen Computer und einem Remotecomputer oder zwischen zwei lokalen Verzeichnissen synchronisieren (unterstützt jedoch nicht die Synchronisierung zwischen zwei Remotecomputern). Es kann auch als Dateikopierwerkzeug, Ersatz cp
und mv
Befehl verwendet werden.
Sein Name r
bezieht sich auf Remote, und rsync bedeutet eigentlich "Remote Sync" (Remote Sync). Im Gegensatz zu anderen Dateiübertragungstools (wie FTP oder scp) besteht das größte Merkmal von rsync darin, dass die vorhandenen Dateien des Absenders und Empfängers überprüft und nur die geänderten Teile übertragen werden (die Standardregel lautet, dass sich die Dateigröße oder die Änderungszeit ändert ).
Zwei, Installation
Wenn rsync nicht auf dem lokalen oder Remote-Computer installiert ist, können Sie es mit dem folgenden Befehl installieren.
# Debian
$ sudo apt-get install rsync
# Red Hat
$ sudo yum install rsync
# Arch Linux
$ sudo pacman -S rsync
Beachten Sie, dass rsync auf beiden Seiten des Getriebes installiert sein muss.
Drei, grundlegende Verwendung
3.1 -r
Parameter
Wenn der Computer mit rsync als cp
und mv
alternativen Befehlen die Verzeichnissynchronisierungsquelle mit dem Zielverzeichnis verbindet.
$ rsync -r source destination
Im obigen Befehl -r
bedeutet dies Rekursion, dh einschließlich Unterverzeichnisse. Beachten Sie, dass dies -r
erforderlich ist, da sonst rsync nicht erfolgreich ausgeführt wird. source
Das Verzeichnis repräsentiert das Quellverzeichnis und das destination
Zielverzeichnis.
Wenn mehrere Dateien oder Verzeichnisse synchronisiert werden müssen, können sie wie folgt geschrieben werden.
$ rsync -r source1 source2 destination
Der obige Befehl, source1
, source2
wird es das synchronisiert wird destination
Verzeichnis.
3.2 -a
Parameter
-a
Parameter können ersetzt werden -r
. Zusätzlich zur rekursiven Synchronisation können auch Metainformationen (wie Änderungszeit, Berechtigungen usw.) synchronisiert werden. Da rsync standardmäßig die Dateigröße und die Änderungszeit verwendet, um zu bestimmen, ob eine Datei aktualisiert werden muss, ist das -a
Verhältnis -r
nützlicher. Die folgende Verwendung ist die übliche Schreibweise.
$ rsync -a source destination
destination
Wenn das Zielverzeichnis nicht vorhanden ist, wird es von rsync automatisch erstellt. Nach Ausführung des obigen Befehls wird das Quellverzeichnis source
vollständig in das Zielverzeichnis kopiert destination
, das die destination/source
Verzeichnisstruktur bildet.
Wenn Sie nur source
den Inhalt des Quellverzeichnisses mit dem Zielverzeichnis synchronisieren möchten destination
, müssen Sie nach dem Quellverzeichnis einen Schrägstrich einfügen.
$ rsync -a source/ destination
Nachdem der obige Befehl ausgeführt wurde, wird der source
Inhalt des Verzeichnisses in das destination
Verzeichnis kopiert , und destination
ein source
Unterverzeichnis wird unten nicht erstellt .
3.3 -n
Parameter
Wenn Sie nicht sicher sind, welches Ergebnis nach der Ausführung von rsync erzeugt wird, können Sie mit -n
oder --dry-run
parameter das Ergebnis der Ausführung simulieren.
$ rsync -anv source/ destination
Im obigen Befehl -n
simuliert der Parameter das Ergebnis der Befehlsausführung und führt den Befehl nicht tatsächlich aus. -v
Der Parameter besteht darin, das Ergebnis an das Terminal auszugeben, damit Sie sehen können, welche Inhalte synchronisiert werden.
3.4 --delete
Parameter
Standardmäßig stellt rsync nur sicher, dass der gesamte Inhalt des Quellverzeichnisses (mit Ausnahme der explizit ausgeschlossenen Dateien) in das Zielverzeichnis kopiert wird. Die beiden Verzeichnisse bleiben nicht gleich und es werden keine Dateien gelöscht. Wenn Sie das Zielverzeichnis zu einer Spiegelkopie des Quellverzeichnisses machen möchten, müssen Sie den --delete
Parameter verwenden, mit dem Dateien gelöscht werden, die nur im Zielverzeichnis, nicht jedoch im Quellverzeichnis vorhanden sind.
$ rsync -av --delete source/ destination
Der obige Befehl, --delete
Parameter, die destination
zu source
einem Spiegelbild werden.
Viertens: Dateien ausschließen
4.1 --exclude
Parameter
Manchmal möchten wir bestimmte Dateien oder Verzeichnisse während der Synchronisierung ausschließen. Derzeit können wir --exclude
Parameter verwenden, um den Ausschlussmodus anzugeben.
$ rsync -av --exclude='*.txt' source/ destination
# 或者
$ rsync -av --exclude '*.txt' source/ destination
Der obige Befehl schließt alle TXT-Dateien aus.
Beachten Sie, dass rsync versteckte Dateien beginnend mit "dot" synchronisiert. Wenn Sie versteckte Dateien ausschließen möchten, können Sie wie folgt schreiben --exclude=".*"
.
Wenn Sie alle Dateien in einem Verzeichnis ausschließen möchten, das Verzeichnis selbst jedoch nicht ausschließen möchten, können Sie es wie folgt schreiben.
$ rsync -av --exclude 'dir1/*' source/ destination
Mehrere Ausschlussmodi können mehrere --exclude
Parameter verwenden.
$ rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination
Mehrere Ausschlussmodi können auch die erweiterte Funktion der großen Erweiterung von Bash nutzen, indem nur ein --exclude
Parameter verwendet wird.
$ rsync -av --exclude={'file1.txt','dir1/*'} source/ destination
Wenn viele Muster ausgeschlossen sind, können Sie sie in eine Datei mit einer Zeile pro Muster schreiben und --exclude-from
diese Datei dann mit Parametern angeben.
$ rsync -av --exclude-from='exclude-file.txt' source/ destination
4.2 --include
Parameter
--include
Der Parameter wird verwendet, um den Dateimodus anzugeben, der synchronisiert werden muss, und wird häufig --exclude
in Kombination damit verwendet.
$ rsync -av --include="*.txt" --exclude='*' source/ destination
Der obige Befehl gibt an, dass alle Dateien während der Synchronisierung ausgeschlossen werden, TXT-Dateien jedoch eingeschlossen werden.
Fünf, Remote-Synchronisation
5.1 SSH-Protokoll
Rsync unterstützt nicht nur die Synchronisation zwischen zwei lokalen Verzeichnissen, sondern auch die Remote-Synchronisation. Es kann lokalen Inhalt mit einem Remote-Server synchronisieren.
$ rsync -av source/ username@remote_host:destination
Sie können Remote-Inhalte auch mit dem lokalen synchronisieren.
$ rsync -av username@remote_host:source/ destination
Standardmäßig verwendet rsync SSH für die Remote-Anmeldung und Datenübertragung.
Da früher rsync das SSH-Protokoll nicht verwendete -e
, musste das Protokoll mit Parametern angegeben werden, die später geändert wurden. Daher kann das Folgende -e ssh
weggelassen werden.
$ rsync -av -e ssh source/ user@remote_host:/destination
Wenn der Befehl ssh jedoch zusätzliche Parameter enthält, müssen Sie die -e
Parameter verwenden, um den auszuführenden SSH-Befehl anzugeben.
$ rsync -av -e 'ssh -p 2234' source/ user@remote_host:/destination
Im obigen Befehl gibt der -e
Parameter an, dass SSH Port 2234 verwendet.
5.2 rsync-Protokoll
Wenn der rsync-Dämon auf einem anderen Server installiert ist und ausgeführt wird, kann neben der Verwendung von SSH auch das rsync://
Protokoll (Standardport 873) für die Übertragung verwendet werden. Der spezifische Wortlaut besteht darin, einen Doppelpunkt zu verwenden, um den Server und das Zielverzeichnis zu trennen ::
.
$ rsync -av source/ 192.168.122.32::module/destination
Beachten Sie, dass die obige Adresse module
nicht der tatsächliche Pfadname ist, sondern ein vom rsync-Dämon angegebener Ressourcenname, der vom Administrator zugewiesen wird.
Wenn Sie die Liste aller vom rsync-Daemon zugewiesenen Module anzeigen möchten, können Sie den folgenden Befehl ausführen.
$ rsync rsync://192.168.122.32
Zusätzlich zur Verwendung von Doppelpunkten im rsync-Protokoll können Sie das rsync://
Protokoll auch direkt zur Angabe der Adresse verwenden.
$ rsync -av source/ rsync://192.168.122.32/module/destination
Sechs inkrementelle Sicherung
Das größte Merkmal von rsync ist, dass inkrementelle Sicherungen durchgeführt werden können, dh standardmäßig werden nur geänderte Dateien kopiert.
Neben dem direkten Vergleich zwischen dem Quellverzeichnis und dem Zielverzeichnis unterstützt rsync auch die Verwendung eines Referenzverzeichnisses, dh der Teil, der zwischen dem Quellverzeichnis und dem Referenzverzeichnis wechselt, wird mit dem Zielverzeichnis synchronisiert.
Die spezielle Methode besteht darin, dass die erste Synchronisierung eine vollständige Sicherung ist und alle Dateien im Basisverzeichnis synchronisiert werden. Jede nachfolgende Synchronisierung ist eine inkrementelle Sicherung. Nur der Teil, der zwischen dem Quellverzeichnis und dem Basisverzeichnis geändert wurde, wird synchronisiert, und dieser Teil wird in einem neuen Zielverzeichnis gespeichert. Dieses neue Zielverzeichnis enthält auch alle Dateien. Tatsächlich sind jedoch nur die geänderten Dateien in diesem Verzeichnis vorhanden, und andere Dateien, die nicht geändert wurden, sind feste Links zu den Basisverzeichnisdateien.
--link-dest
Der Parameter wird verwendet, um das Basisverzeichnis während der Synchronisation anzugeben.
$ rsync -a --delete --link-dest /compare/path /source/path /target/path
Im obigen Befehl gibt der --link-dest
Parameter das Basisverzeichnis an. /compare/path
Anschließend wird das Quellverzeichnis /source/path
mit dem Basisverzeichnis verglichen, um die geänderten Dateien zu ermitteln und in das Zielverzeichnis zu kopieren /target/path
. Die Dateien, die nicht geändert wurden, generieren feste Links. Die erste Sicherung dieses Befehls ist eine vollständige Sicherung, und alle nachfolgenden Sicherungen sind inkrementell.
Unten finden Sie ein Beispiel für ein Skript, das das Home-Verzeichnis des Benutzers sichert.
#!/bin/bash
# A script to perform incremental backups using rsync
set -o errexit
set -o nounset
set -o pipefail
readonly SOURCE_DIR="${HOME}"
readonly BACKUP_DIR="/mnt/data/backups"
readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')"
readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"
readonly LATEST_LINK="${BACKUP_DIR}/latest"
mkdir -p "${BACKUP_DIR}"
rsync -av --delete \
"${SOURCE_DIR}/" \
--link-dest "${LATEST_LINK}" \
--exclude=".cache" \
"${BACKUP_PATH}"
rm -rf "${LATEST_LINK}"
ln -s "${BACKUP_PATH}" "${LATEST_LINK}"
Im obigen Skript generiert jede Synchronisierung ein neues Verzeichnis ${BACKUP_DIR}/${DATETIME}
und ${BACKUP_DIR}/latest
verweist den Softlink auf dieses Verzeichnis. Beim nächsten ${BACKUP_DIR}/latest
Sichern wird es als Basisverzeichnis zum Generieren eines neuen Sicherungsverzeichnisses verwendet. Zeigen Sie ${BACKUP_DIR}/latest
abschließend mit dem Softlink auf das neue Sicherungsverzeichnis.
Sieben Konfigurationselemente
Optionen | Beschreibung |
---|---|
-a, –– Archiv | Archivierungsmodus, dh rekursives Übertragen von Dateien und Beibehalten aller Dateiattribute, was -rlptgoD entspricht (beachten Sie, dass -H nicht enthalten ist). |
-r, –– rekursiv | Unterverzeichnisse im rekursiven Modus verarbeiten |
-l, ––links | Behalten Sie symbolische Linkdateien |
-H, ––hard-links | Behalten Sie fest verknüpfte Dateien |
-p, ––perms | Behalten Sie die Dateiberechtigungen bei |
-t, –– mal | Bewahren Sie die Informationen zur Dateizeit auf |
-g, ––Gruppe | Behalten Sie die Informationen zur Dateigruppe bei |
-o, –– Besitzer | Informationen zum Dateibesitzer aufbewahren (nur für Superuser) |
-D | Bewahren Sie Gerätedateien und spezielle Dateien auf (nur für Superuser). |
-z, ––komprimieren | Komprimieren beim Übertragen von Dateien |
––Exclude = MUSTER | Geben Sie an, dass ein Dateimatching-Muster ausgeschlossen werden soll, das nicht übertragen werden muss |
––Ausschluss aus = DATEI | Lesen Sie die Ausschlussregeln aus der DATEI |
––Include = MUSTER | Geben Sie den Dateiübereinstimmungsmodus an, der übertragen werden soll |
––Include-from = FILE | Lesen Sie Include-Regeln aus FILE |
––Kopie-unsichere-Links | Kopieren Sie Linkdateien, die auf den SRC-Pfad außerhalb des Verzeichnisbaums verweisen |
––Sichere Links | Ignorieren Sie verknüpfte Dateien, die auf den SRC-Pfad außerhalb des Verzeichnisbaums verweisen (Standard). |
--vorhandenen | Aktualisieren Sie nur die Dateien, die bereits auf der Empfängerseite vorhanden sind, und sichern Sie diese neu erstellten Dateien nicht |
––Ignore-existent | Ignorieren Sie die Dateien, die bereits auf der Empfangsseite vorhanden sind, und sichern Sie nur die neu erstellten Dateien |
-b, –– Backup | Wenn sich etwas ändert, sichern Sie die alte Version der Datei im Zielverzeichnis |
––Backup-dir = DIR | Speichern Sie die Sicherungsdatei in Verbindung mit -b im DIR-Verzeichnis |
––Link-dest = DIR | Erstellen Sie eine Hardlink-Datei basierend auf DIR, wenn sich die Datei nicht geändert hat |
--löschen | Löschen Sie Dateien, die sich noch auf der Empfängerseite, aber nicht auf der Senderseite befinden |
–– vorher löschen | Der Empfänger löscht vor der Übertragung (Standard) |
–– Löschen während | Der Empfänger wird während der Übertragung gelöscht |
–– Löschen nach | Empfänger löscht nach Übertragung |
–– Löschen ausgeschlossen | Löschen Sie ausgeschlossene Dateien gleichzeitig auf dem Empfänger |
-e, ––rsh = BEFEHL | Geben Sie ein Shell-Programm an, das rsh ersetzt |
––Ignore-Fehler | Löschen, auch wenn ein E / A-Fehler auftritt |
--teilweise | Bewahren Sie die Dateien auf, die aus irgendeinem Grund nicht vollständig übertragen wurden, um die nachfolgende erneute Übertragung zu beschleunigen |
--Fortschritt | Zeigen Sie den Übertragungsprozess während der Übertragung an |
-P | Entspricht –– partiell –– Fortschritt |
–– Verzögerungsaktualisierungen | Speichern Sie die zu aktualisierende Datei in einem temporären Verzeichnis (der Standardwert ist ". ~ Tmp ~") und aktualisieren Sie die Zieldatei nach Abschluss der Übertragung |
-v, ––verbose | Ausführlicher Ausgabemodus |
-q, –– ruhig | Reduzierter Ausgabemodus |
-h, –– menschlich lesbar | Verwenden Sie lesbare Einheiten für die Größe der Ausgabedatei (z. B. K, M usw.). |
-n, –– trocken laufen | Zeigen Sie, welche Dateien übertragen werden |
––Liste nur | Listen Sie nur Dateien auf, ohne sie zu kopieren |
––Rsyncpath = PROGRAMM | Geben Sie den Pfad des Befehls rsync auf dem Remote-Server an |
––Kennwortdatei = DATEI | Lesen Sie das Kennwort aus DATEI, um die Eingabe des Kennworts auf dem Terminal zu vermeiden, das normalerweise bei der Verbindung mit dem rsync-Server in cron verwendet wird |
-4, ––ipv4 | Verwenden Sie IPv4 |
-6, ––ipv6 | Verwenden Sie IPv6 |
--Ausführung | Versionsinformationen drucken |
--Hilfe | Hilfeinformationen anzeigen |
-
Wenn Sie den Befehl rsync als normaler Benutzer ausführen, wird der Eigentümer der synchronisierten Datei in diesen normalen Benutzer geändert.
-
若使用超级用户身份运行 rsync 命令,同步后的文件的属主将保持原来的用户身份。
八、参考链接
- How To Use Rsync to Sync Local and Remote Directories on a VPS, Justin Ellingwood
- Mirror Your Web Site With rsync, Falko Timme
- Examples on how to use Rsync, Egidio Docile
- How to create incremental backups using rsync on Linux, Egidio Docile