Grundlegende Verwendung von rsync

用法 示例 :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 cpund mvBefehl verwendet werden.

Sein Name rbezieht 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 cpund mvalternativen Befehlen die Verzeichnissynchronisierungsquelle mit dem Zielverzeichnis verbindet.

$ rsync -r source destination

Im obigen Befehl -rbedeutet dies Rekursion, dh einschließlich Unterverzeichnisse. Beachten Sie, dass dies -rerforderlich ist, da sonst rsync nicht erfolgreich ausgeführt wird. sourceDas Verzeichnis repräsentiert das Quellverzeichnis und das destinationZielverzeichnis.

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, source2wird es das synchronisiert wird destinationVerzeichnis.

3.2  -a Parameter

-aParameter 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 -aVerhältnis -rnützlicher. Die folgende Verwendung ist die übliche Schreibweise.

$ rsync -a source destination

destinationWenn das Zielverzeichnis nicht vorhanden ist, wird es von rsync automatisch erstellt. Nach Ausführung des obigen Befehls wird das Quellverzeichnis sourcevollständig in das Zielverzeichnis kopiert destination, das die destination/sourceVerzeichnisstruktur bildet.

Wenn Sie nur sourceden 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 sourceInhalt des Verzeichnisses in das destinationVerzeichnis kopiert , und destinationein sourceUnterverzeichnis 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 -noder --dry-runparameter das Ergebnis der Ausführung simulieren.

$ rsync -anv source/ destination

Im obigen Befehl -nsimuliert der Parameter das Ergebnis der Befehlsausführung und führt den Befehl nicht tatsächlich aus. -vDer 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 --deleteParameter 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, --deleteParameter, die destinationzu sourceeinem 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 --excludeParameter 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 --excludeParameter 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 --excludeParameter 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-fromdiese Datei dann mit Parametern angeben.

$ rsync -av --exclude-from='exclude-file.txt' source/ destination

4.2  --include Parameter

--includeDer Parameter wird verwendet, um den Dateimodus anzugeben, der synchronisiert werden muss, und wird häufig --excludein 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 sshweggelassen werden.

$ rsync -av -e ssh source/ user@remote_host:/destination

Wenn der Befehl ssh jedoch zusätzliche Parameter enthält, müssen Sie die -eParameter verwenden, um den auszuführenden SSH-Befehl anzugeben.

$ rsync -av -e 'ssh -p 2234' source/ user@remote_host:/destination

Im obigen Befehl gibt der -eParameter 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 modulenicht 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-destDer 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-destParameter das Basisverzeichnis an. /compare/pathAnschließend wird das Quellverzeichnis /source/pathmit 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}/latestverweist den Softlink auf dieses Verzeichnis. Beim nächsten ${BACKUP_DIR}/latestSichern wird es als Basisverzeichnis zum Generieren eines neuen Sicherungsverzeichnisses verwendet. Zeigen Sie ${BACKUP_DIR}/latestabschließ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 命令,同步后的文件的属主将保持原来的用户身份。

八、参考链接

Ich denke du magst

Origin blog.csdn.net/JineD/article/details/111870408
Empfohlen
Rangfolge