rsync ist ein kostenloses Befehlszeilentool, mit dem Sie Dateien lokal und remote synchronisieren können. Damit können Sie Dateien und Verzeichnisse übertragen.
Dies macht es sehr nützlich für die Migration von Daten, die Durchführung von Sicherungen und die Spiegelung, was es ideal für Webmaster und Administratoren für wiederkehrende Datenübertragungsaufgaben macht.
In diesem Artikel lernen wir, wie Rysnc funktioniert, und geben einige hilfreiche Beispiele.
Inhaltsverzeichnis
Wie funktioniert rsync?
rsync ist ein Befehlszeilendienstprogramm zur Fernsynchronisierung für Unix-ähnliche Systeme. Es gibt dem Benutzer die Möglichkeit, Dateien nahtlos zwischen Computern oder zwei Hosts zu übertragen/synchronisieren.
Unter der Haube verwendet rsync den Delta-Transfer-Algorithmus. Dieser Algorithmus beinhaltet das Kopieren von Unterschieden zwischen den beiden Dateien über zwei Hosts (Quelle und Ziel). Quelle und Ziel können lokal oder remote sein. Der Befehl rsync kann Aufgaben zum Kopieren/Synchronisieren von Daten auf zwei Arten ausführen. Diese sind:
- Verwenden Sie ssh, rsh zum Kopieren/Synchronisieren zwischen zwei Hosts.
- Verwenden Sie den TCP-rsync-Daemon zum Kopieren/Synchronisieren.
Da es für Unix-ähnliche Systeme entwickelt wurde, funktioniert es auch unter Linux.
Der schrittweise Prozess, den rsync wie folgt verwendet:
- Rsync verwendet SSH, um sich mit dem Remote-Host zu verbinden, und fragt nach einem Passwort.
- Sobald die Verbindung hergestellt ist, kommuniziert der rsync des Remote-Hosts mit der Quelle.
- Diese Programme bestimmen dann die Dateien und Verzeichnisse, die synchronisiert werden müssen. Es verwendet einen Delta-Übertragungsalgorithmus, um den Unterschied zwischen den Dateien zu überprüfen.
Wenn der Befehl rsync eine Datei auf der Fernbedienung, aber nicht auf dem Host findet, kopiert und überträgt er sie auf das Hostsystem. In ähnlicher Weise wird für bereits vorhandene Dateien (sowohl auf dem Host als auch auf der Ferne) der Unterschied zwischen ihnen kopiert (dh geänderte Teile). Schließlich werden vorhandene Dateien auf beiden Systemen ohne Änderungen ignoriert.
Der Befehl rsync erzielt inkrementelle Aktualisierungen, indem er die Differenz in einer temporären Datei speichert, bevor er sie an das Ziel verschiebt.
Bevor du anfängst:
- Sie müssen Root- oder Sudo-Rechte haben
- Zugriff auf das Terminal/die Befehlszeile haben
- SSH-Zugriff zum sicheren Ausführen von rsync-Befehlen
- Sie benötigen auch zwei Maschinen, um rsync zu erstellen.
Für das Tutorial verwenden wir Linux Mint 21.1 Vera. Sie können der Anleitung problemlos mit jeder anderen Linux-Distribution folgen.
Warum rsync über SCP verwenden?
Scp (Secure Copy) ist ein beliebtes Befehlszeilenprotokoll, mit dem Benutzer Dateien kopieren können. Es folgt einem linearen Kopieransatz. Das bedeutet, dass die Dateien einfach von der Quelle zum Ziel kopiert werden. Um dies sicher zu tun, verwendet es SSH.
Die scp-Befehlssyntax lautet wie folgt:
scp option SOURCE DESTINATION
Die Frage bleibt jedoch, warum rsync über scp verwenden?
Nun, die Verwendung von rsync bietet mehrere Vorteile. Zu diesen Vorteilen gehören:
- Schnellere Ausführung: rsync ist schneller als scp, da es ein Remote-Update-Protokoll verwendet. Dadurch können nur Unterschiede und nicht die gesamte Datei übertragen werden. Wenn Sie also im Laufe der Zeit eine regelmäßige Synchronisierung einrichten, müssen Sie beim ersten Mal nur eine vollständige Kopie erstellen. Ab dem nächsten Mal kopiert es nur noch die aktualisierten Teile mit Hilfe des Delta-Transfer-Algorithmus.
- Weniger Bandbreitenverbrauch: Da rsync nicht die gesamte Datei erneut kopieren muss, führt dies zu einem geringeren Bandbreitenverbrauch. Darüber hinaus werden Komprimierungs-/Dekomprimierungsalgorithmen verwendet, um die Dateigröße während der Übertragung zu minimieren.
- Mehr Befehlszeilenoptionen: rsync schlägt scp auch in der Anzahl der Befehlszeilenoptionen. Dies bedeutet, dass Sie rsync mehr feinabstimmen können als scp.
Zusammenfassend ist rsync ein hervorragendes inkrementelles Synchronisierungstool. Das scp-Tool ist auch hilfreich, um Dateien sicher zu übertragen/synchronisieren. In einem realen Szenario eignet sich scp für alltägliche Aufgaben, wenn Sie nach einem einfacheren Ansatz suchen. Verwenden Sie jedoch für wiederkehrende Aufgaben rsync.
rsync-Befehlssyntax
Der rsync-Befehl lautet wie folgt:
Hier werden die Begriffe wie folgt definiert:
- OPTION – Dies sind die rsync-Optionen
- QUELLE – Quellverzeichnis
- DEST – Zielverzeichnis
- USER – Remote-Benutzername
- HOST – Remote-Hostname oder IP-Adresse
Die Optionen sind Parameter, die dem Befehl zusätzliche Funktionalität bieten. Beispielsweise können Sie Daten rekursiv mit der Option -r synchronisieren. Die Option -r synchronisiert jedoch nicht den Besitz von Gruppen und Benutzern, Zeitstempel, Berechtigungen oder symbolische Links. Stattdessen können Sie die Option -a verwenden, die den Befehl im Archivmodus ausführt und sicherstellt, dass alle Eigentumsrechte, Berechtigungen und symbolischen Links der Datei beim Kopieren beibehalten werden.
Andere rsync-Optionen umfassen:
- -z: Daten komprimieren, um Platz zu sparen
- -h: liefert eine menschenlesbare Formatausgabe
- -b: Führt eine Sicherung während des Datensynchronisierungsprozesses durch
- -e: SSH-Protokoll für Remote-Datenübertragungen verwenden
- -fortschritt: Zeigt den Fortschritt der Datensynchronisierung an
- -v: fordert rsync auf, eine ausführliche Ausgabe anzuzeigen
- –n: Führen Sie einen Probelauf durch, um Einstellungen und Setup für die Datensynchronisation zu testen
- -q: Ausgabe und Optionen des rsync-Befehls unterdrücken
rsync installieren
Auf den meisten Unix- und Linux-Systemen ist rsync bereits installiert. Wenn Ihr System nicht über rsync verfügt, können Sie es mit den folgenden Befehlen installieren.
Für Debian/Ubuntu und Mint
sudo apt-get install rsync
Für Arch-Linux
pacman -S rsync
Auf Gentoo
emerge sys-apps/rsync
Auf CentOS/Fedora/REHL
sudo yum install rsync
Auf openSUSE
sudo zypper install rsync
Da wir Linux Mint haben, war rsync vorinstalliert. Sie können also den Befehl rsync im Terminal ausführen, um zu sehen, ob es installiert ist. Es erklärt seine Fähigkeiten, Optionen und andere wichtige Informationen, falls vorhanden.
nitt ~ $ rsync rsync version 3.2.3 protocol version 31 Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others. Web site: https://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes, batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv, symtimes, prealloc, stop-at, no crtimes Optimizations: SIMD, no asm, openssl-crypto Checksum list: xxh128 xxh3 xxh64 (xxhash) md5 md4 none Compress list: zstd lz4 zlibx zlib none rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details. rsync is a file transfer program capable of efficient remote update via a fast differencing algorithm.
Sehen wir uns nun rsync in Aktion mit verschiedenen Anwendungsfällen an.
Für das Tutorial werden wir zwei Verzeichnisse erstellen.
- Quellverzeichnis
- dest-Verzeichnis
Dazu müssen Sie die folgenden Befehle eingeben.
mkdir source-directory mkdir dest-directory
Außerdem müssen wir Dateien generieren, damit rsync funktioniert. Lassen Sie uns also einige Testdateien mit dem folgenden Befehl erstellen.
touch source-directory/file{1..100}
Dadurch werden 100 leere Dateien im Quellverzeichnis erstellt. Sie können dies bestätigen, indem Sie den folgenden Befehl eingeben.
ls source-directory Output: nitt rsync-tutorial $ ls dest-directory source-directory nitt rsync-tutorial $ touch source-directory/file{1..100} nitt rsync-tutorial $ ls source-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Hinweis: Wir haben das dest-Verzeichnis leer gelassen.
Kopieren Sie Verzeichnisse lokal rekursiv
Obwohl rsync hauptsächlich darauf abzielt, Dateien zwischen einem lokalen und einem entfernten Server zu kopieren, ist es ebenso hilfreich, um Dateien lokal zu kopieren.
In diesem Fall verwenden wir die folgende rsync-Syntax.
rsync-Option SOURCE DESTINATION
Kopieren Sie die Dateien in unserem Quellverzeichnis in das Zielverzeichnis, indem Sie den folgenden Befehl ausführen.
rsync -r source-directory/ dest-directory
Hier kopiert der Befehl „rekursiv“ die Dateien aus dem Quellverzeichnis in das Zielverzeichnis.
nitt rsync-tutorial $ ls dest-directory source-directory nitt rsync-tutorial $ ls dest-directory nitt rsync-tutorial $ ls source-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99 nitt rsync-tutorial $ rsync -r source-directory/ dest-directory nitt rsync-tutorial $ ls dest-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Dadurch wird jede einzelne Datei im Quellverzeichnis in das Zielverzeichnis kopiert.
Einzelne Datei lokal kopieren
Nachdem wir nun gelernt haben, wie man zwei Verzeichnisse synchronisiert, lernen wir, wie man eine einzelne Datei kopiert.
Zu diesem Zweck bearbeiten wir die leere Datei file1 im Quellverzeichnis und synchronisieren sie dann mit derselben Datei im Zielverzeichnis.
Um eine Datei zu bearbeiten, geben Sie den folgenden Befehl ein.
nano source-directory/file1
Kopieren Sie nun den folgenden Text und fügen Sie ihn in den Nano-Editor ein.
We're updating file1 in the source-directory. Once we update, we'll push the new update to the dest-directory. rsync doesn't need to re-copy the file using the delta-transfer algorithm. This algorithm checks the differences and then updates destination files accordingly. So, once you save file1 in the source-directory, open file1 in the dest-directory. It'll be empty. However, if we check it after running rsync, you'll see that file1 in dest-directory is updated.
Hinzufügen von Inhalt zu einer Datei
Schließen und speichern Sie nun die Datei.
Lassen Sie uns nun die Datei mit rsync kopieren.
sudo rsync -v --existing source-directory/file1 /dest-directory
#Output nitt rsync-tutorial $ sudo rsync -v --existing source-directory/file1 dest-directory file1 sent 557 bytes received 35 bytes 1,184.00 bytes/sec total size is 474 speedup is 0.80 nitt rsync-tutorial $
Wie Sie vielleicht bemerkt haben, haben wir die Option –existing verwendet. Dadurch werden die vorhandenen Dateien aktualisiert. Wenn Sie den Befehl ohne –existing ausführen, wird er nicht aktualisiert, obwohl er erfolgreich ausgeführt wird.
Wenn die einzelne Datei, die Sie kopieren, nicht im Zielordner vorhanden ist, müssen Sie den folgenden Befehl ausführen.
rsync -v source-directory/newfile dest-directory
#Output nitt rsync-tutorial $ rsync -v source-directory/newfile dest-directory newfile sent 82 bytes received 35 bytes 234.00 bytes/sec total size is 0 speedup is 0.00
Kopieren mehrerer Dateien
Wenn Sie beabsichtigen, mehrere Dateien zu kopieren, müssen Sie die Quellpfade beider Dateien angeben, gefolgt vom Zielverzeichnis.
Zu diesem Zweck erstellen wir zwei neue Dateien: newfile2 und newfile3 im Quellverzeichnis. Führen Sie dazu den folgenden Befehl aus.
touch source-directory/newfile{2..3}
Verwenden Sie nun den folgenden Befehl, um mehrere Dateien zu synchronisieren.
rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
#Output nitt rsync-tutorial $ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory newfile2 newfile3 sent 135 bytes received 54 bytes 378.00 bytes/sec total size is 0 speedup is 0.00 nitt rsync-tutorial $
Datei oder Verzeichnis von lokal nach remote kopieren
Die rsync-Syntax für die Übertragung von lokal zu remote lautet wie folgt.
rsync option SOURCE (email protected):DEST
Wie Sie sehen können, müssen Sie die IP-Adresse des Remote-Computers kennen, damit dies funktioniert. Außerdem müssen Sie die IP-Adresse nach der Quelldatei hinzufügen.
rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Vor Beginn der Übertragung wird nach dem Passwort gefragt. Geben Sie es ein, um fortzufahren. Wenn der Benutzer auf dem Remote-Computer ein anderer ist, müssen Sie ihn vor der IP-Adresse angeben, gefolgt von @.
rsync -av /Projects/rsync-tutorial/source-directory (email protected): /Projects/rsync-tutorial/dest-directory
Wenn Sie beabsichtigen, mehrere Dateien oder Verzeichnisse zu kopieren, müssen Sie die Datei- oder Verzeichnispfade auflisten. Die Syntax dafür ist unten.
rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Fernübertragungsspezifische Protokolle
Mit rsync können Sie bestimmte Dateiübertragungsprotokolle angeben. Dazu müssen Sie die Option -e gefolgt vom Protokoll verwenden.
Wenn Sie beispielsweise das ssh-Protokoll verwenden möchten, müssen Sie -e ssh an den rsync-Befehl anhängen.
rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Kopieren einer Datei oder eines Verzeichnisses von Remote nach Local
Die rsync-Syntax für die Übertragung von lokal zu remote lautet wie folgt.
sync option (email protected):SRC DEST
Dies fungiert als Pull-Request. Um also die erforderlichen Dateien/Verzeichnisse von einem Remote-Server auf Ihren lokalen Computer zu bekommen, müssen Sie den folgenden Befehl ausführen.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Der Befehl zieht die Dateien im Zielverzeichnis des Remote-Computers in das Quellverzeichnis des lokalen Computers.
Ebenso können Sie eine bestimmte Datei ziehen, indem Sie sie durch ihren vollständigen Pfad erwähnen.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory
Um mehrere Dateien oder Verzeichnisse von lokal nach remote zu kopieren, müssen Sie den Pfad innerhalb der geschweiften Klammern (durch Kommas getrennt) nach der Server-IP-Adresse angeben.
rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory
Ebenso können Sie auch Dateien erwähnen.
Live-Fortschritt während der Übertragung anzeigen
Es ist eine gute Idee, den Fortschritt für größere Datensicherungen live zu sehen. Dazu müssen Sie das Flag –progress verwenden. Hängen Sie es an den Befehl rsync an, und Sie können die Übertragungsgeschwindigkeit, die verbleibende Zeit und die übertragene Datenmenge sehen.
rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Quelldateien löschen, sobald die Übertragung abgeschlossen ist
Sie können das Flag -remove-source-files verwenden, um Quelldateien nach der vollständigen Übertragung zu entfernen. Dies kann Ihnen in vielen Szenarien helfen, insbesondere wenn es darum geht, Ihre Dateien spurlos zu sichern oder sie einfach zu verwenden, um Speicherplatz freizugeben.
rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
rsync Probelauf
Mit Rysnc können Sie auch bewerten, bevor Sie einen tatsächlichen Lauf durchführen. Der Probelauf lässt Sie sehen, ob Sie das Richtige tun. Schließlich möchten Sie Dateien nicht versehentlich aktualisieren oder gar löschen.
Sie müssen die Option –dry-run verwenden, um einen Probelauf durchzuführen. Fügen Sie es dem Befehl hinzu, gefolgt von der Quelle und dem Ziel.
sudo rsync -v --dry-run source-directory/file1 dest-directory
nitt rsync-tutorial $ sudo rsync -v --dry-run source-directory/file1 dest-directory file1 sent 43 bytes received 19 bytes 124.00 bytes/sec total size is 474 speedup is 7.65 (DRY RUN) nitt rsync-tutorial
Die Ausgabe ist ähnlich wie zuvor. Sie werden jedoch am Ende der Ausgabe eine Erwähnung von (DRY RUN) bemerken.
Legen Sie die minimale und maximale Dateigröße fest
Mit Rysnc können Sie auch die minimale oder maximale Dateigröße während der Übertragung festlegen.
Wenn Sie also mit einer Mindestgröße von 15 KB übertragen möchten, müssen Sie –min-size=15K verwenden.
rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Der Befehl kopiert nur Dateien mit einer Mindestdateigröße von 15 KB. Wenn die Dateigröße darunter liegt, wird sie ignoriert.
In ähnlicher Weise können Sie das Flag –max-size verwenden, um die maximale Dateigröße festzulegen.
rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Hier ignoriert rsync Dateien über der Größe von 450 KB.
Bandbreitenlimit festlegen
Wenn Sie andere bandbreitenintensive Aufgaben erledigen, können Sie rysnc so einstellen, dass es das Bandbreitenlimit für die Übertragung festlegt. Verwenden Sie dazu –bwlimit=KB/s.
rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Hier stellen wir die Bandbreite während der Übertragung auf 100 Kb/s ein.
Letzte Worte
Dies führt uns zum Ende unseres rsync-Befehlsleitfadens. Wir haben gelernt, wie man rysnc verwendet, und viele Befehle effektiv behandelt.
Rysnc bietet jedoch weit mehr als das, was wir behandelt haben. Aus diesem Grund möchten Sie vielleicht auch die rsync-Manpage durchgehen, auf der jeder Aspekt von rsync behandelt wird.
Sehen Sie sich als Nächstes Befehlszeilen-Spickzettel für Windows, Linux und macOS an.