rsync ist ein Programm, das sich sehr ähnlich verhält wie rcp, aber wesentlich mehr Features und Optionen bereithält. Es benutzt ein spezielles rsync-Protokoll um Dateien auf andere Rechner nicht nur zu kopieren, sondern zu synchronisieren. Das heißt, wenn eine Datei auf dem Zielrechner schon existiert, werden nur die Unterschiede der beiden Dateien übers Netz transportiert, statt die ganze Datei.

rsync kann auf sechs verschiedene Weisen benutzt werden:

  • Kopieren lokaler Dateien. Das ist der Fall, wenn weder Quelle, noch Ziel einen Doppelpunkt beinhalten.
  • Kopieren von lokalen Dateien auf einen entfernten Rechner. Dazu wird eine „remote Shell“ wie rsh oder ssh benutzt. Dieser Aufruf erfolgt, wenn in der Angabe des Ziels ein Doppelpunkt vorkommt.
  • Kopieren von Dateien eines entfernten Rechners auf den lokalen Rechner. Auch hier wird eine remote-Shell wie rsh oder ssh benutzt. In diesem Fall enthält die Angabe der Quelle einen Doppelpunkt.
  • Kopieren von Dateien eines rsync-Servers auf den lokalen Rechner. In diesem Fall enthält die Angabe der Quelle entweder zwei aufeinanderfolgende Doppelpunkte oder eine URL in der Form rsync://…
  • Kopieren lokaler Dateien zu einem rsync-Server. Die Angabe des Ziels enthält zwei aufeinanderfolgende Doppelpunkte.
  • Dateien eines entfernten Rechners auflisten. In diesem Fall wird das lokale Ziel weggelassen. Ansonsten entspricht der Aufruf dem des normalen kopierens von einem entfernten Rechners.

In allen Fällen (außer dem sechsten) muß mindestens eine der Angaben über Quelle und Ziel ein lokaler Rechner sein.

Normalerweise wird rsync als Remote-Shell die rsh benutzen. Das kann entweder mit der Option -e überschrieben werden, oder über die Umgebungsvariable RSYNC_RSH. Ein häufig benutzter Ersatz ist die ssh, die durch verschlüsselte Übertragung ein höheres Maß an Sicherheit zur Verfügung stellt.

Um Dateien mit rsync von Rechner zu Rechner zu übertragen, muß rsync auf beiden involvierten Rechnern installiert sein.

Addressierung

Wie bei rcp werden bei den Angaben von Quelle oder Ziel die Rechnernamen (und eventuelle Usernamen) für Quelle und Ziel separat angegeben. Wie oben schon gesagt, muß mindestens einer dieser Angaben lokal sein. Eine lokale Angabe entspricht einem normalen Unix-Pfad, eine entfernte (remote) Angabe hat die Form:

  [Username@]Hostname:Pfad

Wird der Username weggelassen, so wird der aktuelle Username auf dem lokalen Rechner angenommen. Der Doppelpunkt trennt Dateiangaben vom Rechnernamen. Hat eine Angabe keinen Doppelpunkt, so wird sie als lokal angenommen. Um also lokale Dateien auf einen anderen Rechner (foo) zu übertragen schreiben wir z.B.:

  rsync *.txt foo:/home/hans/Texte

Damit würden alle Dateien im aktuellen Verzeichnis, die auf das Muster *.txt passen, auf den Rechner foo ins Verzeichnis /home/hans/Texte übertragen. Falls es dort schon Dateien gleichen Namens gäbe, werden nur die Unterschiede übertragen, so dass sichergestellt ist, dass die Ziel- und Quelldateien am Ende gleich sind.

Mit den Optionen -a oder -r werden ganze Dateibäume rekursiv kopiert, wobei -a (Archiv) auch die Rechte, Datene und alle anderen Attribute beibehält. Zudem kann mit -z noch eine Komprimierung eingeschaltet werden, so dass die Übertragung der Daten schneller vorgenommen werden kann. Der Befehl

  rsync -az foo:/home/hans/Texte /tmp

würde rekursiv alle Dateien des Verzeichnisses /home/hans/Texte auf dem Rechner foo ins Verzeichnis /tmp des lokalen Rechners kopieren. Bei der Übertragung wären die Daten komrimiert. Es würde das Verzeichnis Texte in /tmp erstellt. Hätten wir geschrieben

  rsync -az foo:/home/hans/Texte/ /tmp

so wären die Dateien aus Texte, aber nicht das Verzeichnis Texte selbst kopiert. Der einzige Unterschied ist also die Angabe des Slash (/) am Ende der Quellangabe. Eine Quellangabe mit Slash am Ende meint also die Dateien, fehlt der Slash, so ist das Verzeichnis selbst gemeint.

rsync als Server

Es ist möglich, Dateien auch ohne die Verwendung einer remote shell wie rsh oder ssh zu transportieren. Dazu wird auf einem Rechner rsync als Server installiert. Er lauscht dann auf den TCP-Port 873.

Um rsync als Server zu starten, muß das Programm mit der Option –daemon gestartet werden. Es erhält seine Konfigurationsinformationen dann aus der Datei /etc/rsyncd.conf.

Um auf einen Server zuzugreifen muß der Client bei der Adressierung entweder statt einem Doppelpunkt zwei angeben, oder eine URL in der Form rsync://…