GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Rsync-Beispiele zum Übertragen von Dateien unter Linux

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=' festlegen.

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.


Linux
  1. 25 Nützliche praktische Beispiele für find-Befehle unter Linux

  2. 14 Beispiele für SCP-Befehle zum sicheren Übertragen von Dateien unter Linux

  3. Praktische Beispiele für den rsync-Befehl unter Linux

  4. So übertragen Sie Dateien unter Linux mit SCP und Rsync

  5. diff-Befehlsbeispiele in Linux

Linux-Suchbefehl mit praktischen Beispielen

lsof-Befehl unter Linux (10 Beispiele)

15 Praktische Beispiele für den Rsync-Befehl unter Linux

Linux rsync-Befehlsbeispiele

lsof-Befehl unter Linux mit Beispielen

Linux-Comm-Befehl mit Beispielen