Auf Linux-Betriebssystemen steht „rsync“ für R Emote S synchronisieren Es ist ein Dienstprogramm zum Synchronisieren (Kopieren) von Dateien und Verzeichnissen von einer Quelle (SRC) zu einem Ziel (DEST).
Dateien und Verzeichnisse können auf einem lokalen Host oder zu/von einem Remote-Host synchronisiert werden. Auf dem SRC werden Dateien und Verzeichnisse synchronisiert. Wohingegen auf dem DEST die synchronisierten Dateien und Verzeichnisse stattfinden.
Darüber hinaus kann der Befehl rsync Dateien und Verzeichnisse rekursiv kopieren, symbolische Links kopieren und die Dateiidentität (Berechtigungen, Gruppe, Änderungszeit und Eigentum) beibehalten.
Rsync kann zwei verschiedene Wege zum Synchronisieren/Kopieren von Dateien oder Verzeichnissen verwenden:
- Remote-Shell verwenden:ssh oder rsh
- Rsync-Daemon direkt über TCP verwenden
Darüber hinaus verwendet rsync einen Delta-Übertragungsalgorithmus, der nur die unterschiedlichen Daten zwischen SRC und DEST kopiert/synchronisiert.
In diesem Lernprogramm werden viele Möglichkeiten zur Verwendung des Befehls rsync durch praktische Übungen und Beispiele beschrieben. Wir werden auch die Einzelheiten der häufigsten Optionen des rsync-Befehls erläutern.
Rsync-Befehlssyntax
Bevor wir uns eingehend mit der Verwendung des Befehls rsync befassen, werfen wir einen Blick auf seine Syntax:
rsync [options] <SRC_PATH> <DEST_PATH>
1. Datei auf dem lokalen Rechner kopieren/synchronisieren
Der Rsync-Befehl kann zum Kopieren/Synchronisieren von Dateien auf Ihrem lokalen Computer verwendet werden.
Angenommen, Sie möchten eine Datei aus dem Home-Verzeichnis des Benutzers „linoxide“ mit dem Namen „/home/linoxide“ in den Ordner „/opt/test“ kopieren.
$ sudo rsync -zvh /home/linoxide/computer-networking.pdf /opt/test/
computer-networking.pdf
sent 1.01K bytes received 35 bytes 2.10K bytes/sec
total size is 3.03K speedup is 2.89
Wo:
-z
:komprimieren
-v
:verbose die Ausgabe
-h
:für Menschen lesbar
2. Copy/Sync-Verzeichnis auf dem lokalen Rechner
Um alle Dateien aus dem lokalen SRC-Verzeichnis in das DEST-Verzeichnis zu übertragen, führen Sie den Befehl rsync mit der Option -zavh
aus .
Angenommen, Sie möchten das Home-Verzeichnis des Benutzers „linoxide“ mit dem Namen „/home/linoxide“ in den Ordner „/opt/backup“ kopieren.
$ sudo rsync -zavh /home/linoxide/ /opt/backup/
sending incremental file list
./
.bash_history
.bash_logout
.bashrc
.lesshst
.profile
.sudo_as_admin_successful
.viminfo
computer-networking.pdf
.ssh/
.ssh/known_hosts
sent 4.85K bytes received 198 bytes 10.10K bytes/sec
total size is 9.59K speedup is 1.90
Wo:
-a
:Daten während des Kopier-/Synchronisationsprozesses archivieren
Sie können überprüfen, ob der rsync-Befehl erfolgreich war oder nicht? Führen Sie den folgenden Befehl aus:
$ ls /opt/backup/ -la
total 40
drwxr-xr-x 3 linoxide linoxide 4096 Thg 6 15 16:02 .
drwxr-xr-x 4 root root 4096 Thg 6 15 16:25 ..
-rw------- 1 linoxide linoxide 817 Thg 6 15 16:01 .bash_history
-rw-r--r-- 1 linoxide linoxide 220 Thg 6 11 15:58 .bash_logout
-rw-r--r-- 1 linoxide linoxide 3771 Thg 6 11 15:58 .bashrc
-rw-rw-r-- 1 linoxide linoxide 3028 Thg 2 25 2017 computer-networking.pdf
-rw------- 1 linoxide linoxide 40 Thg 6 15 15:51 .lesshst
-rw-r--r-- 1 linoxide linoxide 807 Thg 6 11 15:58 .profile
drwx------ 2 linoxide linoxide 4096 Thg 6 13 17:58 .ssh
-rw-r--r-- 1 linoxide linoxide 0 Thg 6 15 16:02 .sudo_as_admin_successful
-rw------- 1 linoxide linoxide 680 Thg 6 14 16:50 .viminfo
3. Rsync über ssh mit spezifischem Port
Sie können ssh (Secure Shell) zum Kopieren/Synchronisieren von Daten verwenden, Ihre Daten werden in einer sicheren Verbindung mit Verschlüsselung übertragen. Niemand kann Ihre Daten lesen, während sie im Internet übertragen werden. Wenn Sie den Befehl rsync verwenden, müssen Sie das Benutzer-/Root-Passwort angeben, um die jeweilige Aufgabe auszuführen. Wenn Sie die SSH-Option verwenden, werden Ihre Anmeldungen verschlüsselt gesendet, sodass Ihr Passwort sicher ist.
Kopieren Sie eine Datei mit einem bestimmten ssh-Port von einem entfernten zu einem lokalen Ort. Um ein Protokoll mit dem rsync-Befehl anzugeben, müssen Sie -e
verwenden Option mit dem Protokollnamen, den Sie verwenden möchten.
Beispielsweise kopiert der folgende rsync-Befehl die Datei „deploy.yaml“ über eine Remote-Shell von einem Remote-Computer in das Home-Verzeichnis des Benutzers „linoxide“.
$ rsync -avz -e "ssh -p 22" [email protected]:/home/cas/deploy.yaml /home/linoxide/
[email protected]'s password:
receiving incremental file list
sent 20 bytes received 60 bytes 32.00 bytes/sec
total size is 239 speedup is 2.99
4. Dateien und Verzeichnisse vom lokalen Rechner auf den entfernten Rechner kopieren/synchronisieren
Angenommen, Sie möchten den Ordner „test-data“ im Home-Verzeichnis des Benutzers „linoxide“ auf dem lokalen Host in das Home-Verzeichnis eines Remote-Computers „[email protected]“ kopieren/synchronisieren, führen Sie den Befehl aus:
$ rsync -azrvh /home/linoxide/computer-networking.pdf [email protected]:
[email protected]'s password:
sending incremental file list
computer-networking.pdf
sent 1.04K bytes received 35 bytes 430.80 bytes/sec
total size is 3.03K speedup is 2.81
Wo:
-r
:rekursive Kopie
5. Kopieren/Synchronisieren von Dateien und Verzeichnissen vom Remote-Rechner auf den lokalen Rechner
Der Befehl rsync hilft Ihnen, ein entferntes Verzeichnis „document“ zu übertragen, das auf Ihren lokalen Host kopiert werden soll.
Angenommen, Sie möchten Dateien/Verzeichnisse von einem entfernten Host „[email protected]“ in das Home-Verzeichnis des Benutzers „linoxide“ kopieren/synchronisieren.
Zum Beispiel:
$ rsync -zavhr [email protected]:document /home/linoxide
[email protected]'s password:
receiving incremental file list
document/
document/kubernetes.txt
sent 47 bytes received 139 bytes 74.40 bytes/sec
total size is 0 speedup is 0.00
6. Rsync -include- und -exclude-Optionen
Mit diesen beiden Optionen können wir Dateien einschließen und ausschließen, indem wir Parameter angeben. Diese Option hilft uns dabei, die Dateien oder Verzeichnisse anzugeben, die Sie in Ihre Synchronisierung einbeziehen möchten, und Dateien und Ordner auszuschließen, die Sie nicht übertragen möchten.
Hier in diesem Beispiel schließt der Befehl rsync nur die Dateien und Verzeichnisse ein, die mit „k“ beginnen, und schließt alle anderen Dateien und Verzeichnisse aus.
$ rsync -avhz -e "ssh -p 22" --include 'k*' --exclude '*' [email protected]: /home/linoxide
[email protected]'s password:
receiving incremental file list
./
k8s.yaml
kubernetes.yaml
kuber/
sent 88 bytes received 280 bytes 147.20 bytes/sec
total size is 73 speedup is 0.20
7. Maximale Dateigröße festlegen
Sie können die maximale Dateigröße angeben, die übertragen oder synchronisiert werden soll. Sie können dies mit der Option '--max-size' tun.
Im folgenden Beispiel beträgt die maximale Dateigröße 200 KB, sodass dieser Befehl nur die Dateien überträgt, die gleich oder kleiner als 200 KB sind.
$ rsync -zavhr --max-size='200k' [email protected]: /home/linoxide
[email protected]'s password:
receiving incremental file list
.bash_history
.bash_logout
.bashrc
.profile
.sudo_as_admin_successful
.viminfo
computer-networking.pdf
sent 2.58K bytes received 51.60K bytes 21.67K bytes/sec
total size is 113.24K speedup is 2.09
8. Quelldateien nach erfolgreicher Übertragung löschen
Angenommen, Sie haben einen Webserver und einen Datensicherungsserver, Sie haben ein tägliches Backup erstellt und es mit Ihrem Backup-Server synchronisiert, jetzt möchten Sie diese lokale Kopie des Backups nicht auf Ihrem Webserver behalten. Werden Sie also warten, bis die Übertragung abgeschlossen ist, und dann diese lokale Sicherungsdatei manuell löschen? Natürlich nicht. Dieses automatische Löschen kann mit der Option '--remove-source-files' durchgeführt werden.
$ ls /home/directory
computer-networking.pdf deploy.yaml document k8s.yaml kuber kubernetes.yaml
------
$ rsync -azvh --remove-source-files /home/linoxide/deploy.yaml [email protected]:
[email protected]'s password:
sending incremental file list
sent 70 bytes received 20 bytes 36.00 bytes/sec
total size is 239 speedup is 2.66
Führen Sie den Befehl „ls“ erneut aus. Sie können sehen, dass die Datei „deploy.yaml“ auf SRC gelöscht wurde.
$ ls
computer-networking.pdf document k8s.yaml kuber kubernetes.yaml
9. Finden Sie den Unterschied in Dateien und Verzeichnissen zwischen SRC und DEST
Um Unterschiede in den Dateien der Verzeichnisse zwischen SRC und DEST zu finden, können Sie den Befehl rsync mit der Option „-i“ ausführen.
$ rsync -avzi /home/linoxide/cloud [email protected]:
[email protected]'s password:
sending incremental file list
cd+++++++++ cloud/
<f+++++++++ cloud/computer-networking.pdf
<f+++++++++ cloud/k8s.yaml
<f+++++++++ cloud/kubernetes.yaml
cd+++++++++ cloud/document/
<f+++++++++ cloud/document/kubernetes.txt
cd+++++++++ cloud/kuber/
<f+++++++++ cloud/kuber/test.txt
sent 1,472 bytes received 127 bytes 1,066.00 bytes/sec
total size is 3,101 speedup is 1.94
10. Begrenzen Sie die Bandbreite
Sie können die Begrenzung der Bandbreite beim Ausführen des rsync-Befehls mit der Option '--bwlimit=
Angenommen, Sie möchten die Datenübertragungsrate auf 300 KB/s begrenzen, führen Sie den folgenden Befehl aus:
$ rsync -avzh --bwlimit=300 /home/linoxide/coursera.png [email protected]:
[email protected]'s password:
sending incremental file list
coursera.png
sent 2.93M bytes received 35 bytes 234.48K bytes/sec
total size is 3.00M speedup is 1.02
11. Setzen Sie die Übertragung fort, wenn scp fehlgeschlagen ist
Manchmal müssen Sie eine sehr große Datei per scp-Befehl übertragen, bekamen aber beim Kopieren einen Fehler und konnten aufgrund der großen Dateigröße und des Zeitverbrauchs nicht erneut mit dem scp-Befehl übertragen.
In dieser Situation können Sie den Befehl rsync verwenden, um mit dem Kopieren der Datei zu beginnen, von wo aus der Fehler aufgetreten ist. Beispiel:Kopieren einer großen ISO-Datei im Home-Verzeichnis auf den Remote-Host „[email protected]“
$ scp /home/linoxide/ubuntu-18.04.4-live-server-amd64.iso [email protected]:
[email protected]'s password:
ubuntu-18.04.4-live-server-amd64.iso 32% 278MB 86.7MB/s 00:06 ETA
Der Prozess wurde vom Benutzer beendet. Damals wurden 32 % der Dateien übertragen. Jetzt können Sie die aktuelle Arbeit fortsetzen, indem Sie rsync:
ausführen$ rsync -P -avzh ubuntu-18.04.4-live-server-amd64.iso [email protected]:
[email protected]'s password:
sending incremental file list
ubuntu-18.04.4-live-server-amd64.iso
912.26M 100% 15.89MB/s 0:00:54 (xfr#1, to-chk=0/1)
sent 541.25M bytes received 132.44K bytes 9.25M bytes/sec
total size is 912.26M speedup is 1.69
12. Fortschritt während der Datenübertragung anzeigen
Wenn Sie den übertragenen Fortschritt beim Ausführen des rsync-Befehls sehen möchten, können Sie die Option '--progress' verwenden.
Es zeigt die Dateien und die verbleibende Zeit bis zum Abschluss des Kopiervorgangs.
Zum Beispiel:
$ rsync -avh --progress /home/linoxide/cloud/ [email protected]:
[email protected]'s password:
sending incremental file list
./
computer-networking.pdf
3.03K 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=8/10)
coursera.png
3.00M 100% 114.38MB/s 0:00:00 (xfr#2, to-chk=7/10)
k8s.yaml
39 100% 1.52kB/s 0:00:00 (xfr#3, to-chk=6/10)
kubernetes.yaml
34 100% 1.33kB/s 0:00:00 (xfr#4, to-chk=5/10)
ubuntu-18.04.4-live-server-amd64.iso
912.26M 100% 89.60MB/s 0:00:09 (xfr#5, to-chk=4/10)
document/
document/kubernetes.txt
0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=1/10)
kuber/
kuber/test.txt
0 100% 0.00kB/s 0:00:00 (xfr#7, to-chk=0/10)
sent 915.49M bytes received 164 bytes 79.61M bytes/sec
total size is 915.26M speedup is 1.00
Schlussfolgerung
In diesem Tutorial haben wir gelernt, wie man den Befehl rsync mit einigen Beispielen zum Kopieren oder Synchronisieren von Dateien/Verzeichnissen verwendet.
Danke fürs Lesen und bitte hinterlassen Sie Ihren Vorschlag im Kommentarbereich unten.