rsync

Was ist rsync?

„rsync“ ist ein Programm, welches das synchronisieren von 2 entweder lokalen oder entfernten Ordner erlaubt. Einfach gesagt, es ist eine bessere Variante vom Befehl „cp“ mit dem Dateien und Ordner kopiert werden können. Hauptmerkmal hier ist, dass es auf dem SSH-Protokoll aufbaut.

Kann ich nicht FTP oder SFTP auch nehmen?

Einfach gesagt: FTP => NEIN, SFTP => OK aber nicht so gut wie rsync

Genauere Beschreibung von Datei-Übertragungsmethoden siehe HIER.

Wieso ist rsync besser als SFTP wenn beide auf SSH basieren?

Wenn rsync auf beiden Seiten installiert ist werden NUR die Änderungen in den jeweiligen Dateien übertragen, die auch Änderungen beinhalten. Hierfür verwendet rsync einen „Delta-Kodierungs-Algorithmus“ und spart hiermit sehr viel Traffic.

Wie verwende ich rsync mit entfernten Rechner?

Voraussetzung: rsync muss auf beiden Seiten installiert sein! Kann über den Befehl „rsync --version“ herausgefunden werden. Es sollte aktuell (September 2019) mind. Version 3 installiert sein.

Gehen wir von folgenden 2 Systemen aus:

Der aktuelle Rechner (PC1), auf dem ein Ordner vorhanden ist, der auf einen extern erreichbaren Rechner (PC2) kopiert werden soll.

Befehl

rsync -aP <source> <destination>

D.h. wir sind am PC1 eingeloggt und haben im aktuellen Verzeichnis im Terminal einen Ordner wie z.B. „wordpress“ den wir auf den entfernten Rechner PC2 in den absoluten Pfad /var/www/html kopieren wollen. Für unseren entfernten Rechner nehmen wir einfach als Server-Adresse devguide.at und als Benutzer „admin“ her.

rsync -aP wordpress admin@devguide.at:/var/ww/html

Was passiert nun? Wenn sonst nichts eingestellt ist wird entweder der Transfer nicht stattfinden oder es wird nach einem Passwort für den Benutzer „admin“ gefragt. Das hängt ganz davon ab wie der SSH-Daemon von PC2 eingestellt ist.

Damit wir aber nicht bei jedem neuen Transfer das Passwort eingeben müssen wird hier von einer schon eingerichteten „Public-Key-Auth“ ausgegangen. Siehe hierzu HIER für weitere Details.

D.h. nun haben wir eine fertig eingerichtete „Public-Key-Auth“ und wir können uns testweise ohne Passwort mit dem Befehl

ssh admin@devguide.at

auf PC2 anmelden.

Nun sollte der folgende Befehl ohne Probleme funktionieren:

rsync -aP wordpress admin@devguide.at:/var/ww/html

Was passiert nun?

Der Ordner „wordpress“ wird in den Ordner „/var/ww/html“ kopiert, d.h. wir haben dann auf PC2 folgenden Ordner „/var/ww/html/wordpress“.

Was ist aber, wenn ich nur den Inhalt aus dem „wordpress“ Ordner kopieren will und nicht den gesamten Ordner?

rsync -aP wordpress/ admin@devguide.at:/var/ww/html

Der Unterschied hier ist, dass bei der <source> Seite am Ende des Pfads ein / eingefügt wurde.

Bei der <destination> Seite macht es keinen Unterschied ob ein / hinten angegeben wird oder nicht.

Ich möchte aber nun den Inhalt eines Ordners von PC2 auf meinen lokalen Rechner laden!

Hierfür muss einfach nur <source> und <destination> umgedreht werden!

rsync -aP admin@devguide.at:/var/ww/html/ wordpress

Ich möchte wirklich nur die Dateien aus <source> am <destination> haben und nichts anderes!

Standardmäßig lässt rsync alle Dateien in Ruhe, die auf der <destination> Seite vorhanden sind aber nicht auf der <source> Seite vorhanden waren.

Jedoch gibt es Situationen, wo dies nicht gewünscht wird und sozusagen immer nur der <source> Stand auf die <destination> Seite geladen werden soll und sonst alles in dem angegebenen Ordner auf der <destination> Seite gelöscht werden soll.

Hierfür gibt es die Option „–delete“

Beispiel

PC1 Dateien im Ordner „html

  • index.html
  • logo.svg
  • style.css

PC2 Dateien im Ordner „/var/www/html

  • index.html
  • logo.svg
  • style.css
  • nfo.php

D.h. mit dem Befehl

rsync -aP --delete html/ admin@devguide.at:/var/ww/html

werden alle Dateien von PC1 auf PC2 geladen UND die nfo.php von PC2 gelöscht, weil sie nicht auf PC1 vorhanden war.

Wenn man die Option „--delete“ weglässt bleibt die nfo.php auf PC2 bestehen.

Optionen für den rsync Befehl

  • -a ist das gleiche wie -rlptgoD. Einfach gesagt rekursiv + Rechte + Owner + Group + Zeiten
    • -r: Kopiert Ordner auch rekursiv
    • -l: Falls Symlinks vorhanden sind sollen diese nicht entfernt werden
    • -p: Zeige den aktuellen Fortschritt während des Kopierens an
    • -t: Kopiere auch das Erstell- und Änderungsdatum der jeweiligen Dateien und Ordner
    • -g: Falls möglich übernehme die Group der jeweiligen Dateien oder Ordner von <source> auf <destination>
    • -o: Falls möglich übernehme den Owner der jeweiligen Dateien oder Ordner von <source> auf <destination>
    • -D: Übertrage auch „Special Files“ und „Devices“ von <source> auf <destination>
  • -P ist das gleiche wie --partial --progress
    • Falls Verbindung abgebrochen wir, behalte teilweise übertragene Dateien auf der <destination> und zeige den aktuellen Fortschritt an 
  • –delete
    • lösche Dateien, die im <destination> „übrig“ geblieben sind und nicht im <source> angegeben wurden.
  • –exclude
    • Dateien und/oder Ordner ausnehmen

Share this post

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.