Mit dem Programm rsync [1] lassen sich lokal oder remote Dateien und Verzeichnisse synchronisieren. Dazu wird das “rsync remote-update protocol” benutzt, d. h. es wird zunächst auf Unterschiede zwischen Quelle und Ziel geprüft, bevor die eigentliche Übertragung beginnt – auf diese Weise wird das Transfervolumen minimiert.
Zu Befehl
Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.
Das Programm rsync hilft beim Kopieren von Daten auf lokalen oder entfernten Systemen. Dabei sorgt es dafür, dass auf Wunsch Dateieigenschaften (z. B. Rechte oder Besitzer) und ganze Verzeichnisstrukturen beibehalten werden. Der Programmaufruf ist ähnlich wie bei rcp oder scp: rsync datei(en) ziel. Um ein Verzeichnis dir1 auf dem lokalen System rekursiv in ein anderes Verzeichnis backup zu sichern, verwenden Sie:
huhn@asteroid:~$ rsync -r dir1 backup
Die Option -r (--recursive) sorgt dafür, dass Unterverzeichnisse bis in den letzten Winkel übertragen werden. Symbolische Linkswerden allerdings davon ausgeschlossen. Ein Hinweis skipping non-regular file dir2/link verrät: Die Datei link im Unterverzeichnis dir2 ist ein Symlink und wurde nicht kopiert. Sollen diese Verweise auf andere Dateien beim Übertragen berücksichtigt werden, hängen Sie den Parameter -l (--links) an den Aufruf an: rsync -rl dir1 backup.
Sollen symbolische Links hingegen “aufgelöst” werden, verwenden Sie die Option -L (--copy-links) – die ehemaligen Verweise finden sich nun als normale Dateien im backup-Verzeichnis. Damit Dateirechtebeibehalten werden, setzen Sie den Parameter -p (--perms); für das Speichern der Timestampsdie Option -t (--times).
Die Option zum Beibehalten des Dateieigentümers (-o oder --owner) kann nur von root verwendet werden, weil kein Benutzer einem anderen einfach so Dateien schenken darf. Wie die Manpage verrät, können alle diese Parameter -rlptg in einer einzigen Option zusammengefasst werden – -a (--archive) kopiert rekursiv und behält alle Dateieigenschaften bei. Auch hier sind root-Rechte nötig.
Gemustert
Mit dem Parameter --exclude=suchmuster werden Dateien vom Kopieren ausgeschlossen, die dem angegebenen Suchmusterentsprechen. Sollen beispielsweise Files, die auf .backup enden, von der Datensicherung ausgeschlossen werden, lautet der Befehl:
huhn@asteroid:~$ rsync --exclude=@L: *.backup quelle ziel
Dabei dürfen soviele --exclude-Optionen angegeben werden, wie nötig sind, um bestimmte Dateien auszuschließen. Ähnlich funktioniert der Parameter --exclude-from=datei – in einer Datei sind alle entsprechenden Suchmuster aufgelistet (eins pro Zeile), um die Dateien zu beschreiben, die ausgeschlossen werden sollen. Natürlich geht das auch anders herum: Die beiden Parameter --include=suchmuster und --include-from=datei helfen bei der Beschreibung von Mustern, die in den Transfer aufgenommen werden sollen.
Verschlüsselt bitte
Aus Sicherheitsgründen sollte rsync am besten zusammen mit ssh verwendet werden. Die “Secure Shell” (mit den beiden Kommandos ssh für das Login und scp für die sichere Datenübertragung) sorgt dafür, dass Daten nicht im Klartext über das Netz gehen, sondern verschlüsselt werden [3]. Das Tool scp stößt beim Datentransfer schnell an seine Grenzen. Bricht ein Down- oder Upload beispielsweise einmal ab, “merkt” sich das Programm nicht, welche Daten schon übertragen wurden. Das ist ärgerlich, gerade wenn Verzeichnisse rekursiv (scp -r) oder große Datenmengen unterwegs sind. Auch eine Versionskontrolle findet in diesem Szenario nicht statt, d. h. Dateien mit gleichem Namen werden einfach überschrieben.
Der Parameter, mit dem rsync zur Verwendung von ssh überredet wird, ist -e ssh oder --rsh=ssh (definiert ein Ersatzkommando für rsh, dieses wird durch das Gleichheitszeichen übergeben). Soll dem Kommando ssh ein eigener Parameter, wie z. B. -1 (um Protokoll-Version 1 zu verwenden), mitgegeben werden, muss der ganze Aufruf in Anführungszeichen eingeschlossen werden, da rsync sonst versucht, die Option auszuwerten:
huhn@asteroid:~$ rsync -e "ssh -1" datei ziel
Die verschlüsselte Verwendung von rsync lässt sich durch Setzen einer Umgebungsvariableübrigens als Standard definieren:
huhn@asteroid:~$ export RSYNC_RSH=ssh
Nach Setzen dieser Variable darf die Option -e ssh weggelassen werden. Übrigens: rsync eignet sich zusammen mit der Option --partial prima zum Übertragen von größeren Dateien:
huhn@asteroid:~$ rsync --partial datei.avi transpluto:filme/ Password:
Auf dem anderen Server sehen Sie mit Hilfe von ls -l das partielle File:
huhn@transpluto:~$ ls -l .datei@L: * -rw——- 1 huhn users 3899392 Jan 6 20:31 .datei.avi.yeahkG
Bricht der Kopiervorgang ab, wird der schon transferierte Teil nicht gelöscht, sondern unter dem Dateinamen abgelegt. Nehmen Sie die Übertragung wieder auf, prüft rsync zunächst, was auf dem Zielsystem schon vorhanden ist und setzt dort wieder an.
Glossar
- Symbolische Links
- Ein Verweis auf eine andere Datei, der von Anwendungsprogrammen wie eben diese Datei behandelt wird. Wenn die Datei, auf die ein Symlink verweist, gelöscht wird, zeigt der Link ins Leere. Symlinks werden mit dem Kommando “ln -s quelldatei zieldatei” erzeugt.
- Dateirechte
- Dateien haben neben einem Eigentümer und der Zugehörigkeit zu einer Gruppe bestimmte Rechte: Das “r” steht für Leseerlaubnis (“read”), “w” für Schreibberechtigung (“write”) und das “x” für die Erlaubnis, die Datei auszuführen (“executable”). Die ersten drei Zeichen gehören zum Dateieigentümer, die zweiten drei zur Gruppe und die letzte Dreiergruppe gehört zu allen übrigen Benutzern des Systems. Je nachdem welcher Buchstabe dort erscheint, darf das File entsprechend gelesen, geschrieben oder ausgeführt werden [2].
- Timestamps
- Die Linux-Dateisysteme speichern eine Vielzahl von Dateiinformationen ab, z. B. die Zeitpunkte (“Zeitstempel”), die seit dem letzten Dateizugriff (atime), der letzten Statusänderung (ctime) oder der letzten Dateiinhaltsänderung (mtime) vergangen sind.
- Suchmuster
- Allgemein bestehen diese aus zwei Komponenten: der Angabe, nach welchem Zeichen gesucht wird, und der Angabe, wie oft die gesuchten Zeichen auftreten dürfen. Zusammen mit rsync gibt es eine ganze Reihe von komplizierten Zeichenkombinationen, denen in der Manpage etliche Abschnitte gewidmet werden. Mit den gängigen Wildcards können Sie aber schon die meisten Dinge abdecken.
- Wildcards
- Sonderzeichen, die Teile von Zeichenketten unbestimmt lassen. Ein Fragezeichen “?” in einer Zeichenkette lässt nur denjenigen Buchstaben dieser Zeichenkette unbestimmt (z. B. h?llo => hallo, hGllo, h7llo,…), an dem sich das Fragezeichen befindet, während ein Stern “@L: *” für beliebig viele verschiedene Zeichen steht (z. B. G@L: *ss => Guss, Genuss).
- Umgebungsvariable
- Die Shell stellt dem Benutzer Speicherplatz bereit, um bestimmte Informationen aufzubewahren und Programmen zugänglich zu machen. Diese Umgebungsvariablen (environment variables) bestehen jeweils aus dem Namen und dem zugeordneten Wert. Für die Linux-Standard-Shell bash setzen Sie diese mit export, für die csh mit dem Befehl setenv.
Infos
[2] Heike Jurzik: “Rechte und Pflichten – meine oder Deine Datei?”, LinuxUser 10/2000, S. 93, http://www.linux-user.de/ausgabe/2000/10/093-zubefehl/befehl9.html
[3] Heike Jurzik und Hans-Georg Eßer: “Auf der sicheren Seite – ssh und scp“, LinuxUser 07/2001, S. 92, http://www.linux-user.de/ausgabe/2001/07/092-zubefehl/befehl17.html





