Kann mir jemand diesen rsync-Befehl erklären?


11

Kann mir jemand sagen, was das macht?

rsync -uva --delete /srv/bkp01 /srv/offbk2/ > ~/offbkp01.log

Löscht es bkp01und offbk2und sendet ein Protokoll an offbkp01.log?


Er kann keine Manpages lesen. Was lässt Sie denken, dass er die Antworten hier liest? XD
Twinkles

2
Wer braucht Manpages, wenn Sie EXPLAINSHELL.com/… haben ?!
Tom

Antworten:


33

Um dies in Teile zu zerlegen, gibt es zwei Hauptabschnitte, gefolgt von einer Zusammenfassung und Anmerkungen:

  • Der rsyncBefehl:
    rsync -uva --delete /srv/bkp01 /srv/offbk2/
  • Die Ausgabeumleitung durch die Shell, die den Befehl rsync ausführt:
    rsync-command > ~/offbkp01.log

rsync Befehl:

Basisbefehl:

  • rsync - Ich gehe davon aus, dass dies keiner Erklärung bedarf (wird aber auf Anfrage bereitgestellt).

Befehlsoptionen:

  • -uva - Eine Reihe von Einzelzeichenoptionen (kurze und lange Form):

    • -u --update- teilt rsync mit, dass alle Änderungen nur für Dateien am Ziel gelten sollen, die das gleiche Alter (und unterschiedliche Größen) oder älter als die Dateien in der Quelle haben. Das heißt, rsync sollte nur die Änderungen von der Quelle weitergeben, die das Ziel aktualisieren würden , aber keine Änderungen vornehmen, die dazu führen würden, dass eine Zieldatei zu einer älteren Version wird.

      Es gibt einige Ausnahmen. Unterschiede im Typ (z. B. eine ist eine Datei, die andere ist ein Verzeichnis) führen unabhängig vom Datum zu einer Aktualisierung. Symlinks und andere spezielle Dateien ignorieren diese Option. Dies hat vor allem keinen Einfluss darauf, welche Dateien gelöscht werden.

    • -v --verbose- Erhöht die Menge an Informationen, die rsync während der Ausführung druckt. Ohne dies druckt rsync (fast?) Nichts. Wenn diese Option unverändert ist, teilt Ihnen rsync mit, welche Dateien übertragen werden, und fügt am Ende eine Zusammenfassung hinzu. Mehr vs erhöhen die gedruckten Informationen, obwohl in der Manpage angegeben ist, dass mehr als zwei vs nur beim Debuggen verwendet werden sollten.
    • -a --archive- Dies entspricht mehreren anderen Optionen ( -rlptgD), die zusammen verpackt sind. Wie der lange Name schon sagt, können Sie auf diese Weise schnell viele gängige Optionen für die Archivierung von Dateien und Verzeichnissen festlegen. Es wird:
      • -r --recursive- Weist rsync an, Verzeichnisse rekursiv zu kopieren. Ohne diese oder die speziellere -d --dirsOption würde rsync einfach alle gefundenen Verzeichnisse überspringen (und Sie in der Ausgabe darüber informieren).
      • -l --links- Wenn die Quelle ein Symlink ist, erstellen Sie einen Symlink auf dem Ziel. Abhängig von anderen Optionen können Symlinks andernfalls übersprungen oder in eine vollständig separate Kopie umgewandelt werden (dh ein echtes Verzeichnis mit Inhalten (oder eine andere Kopie der Datei) anstelle des Symlinks).
      • -p --perms - Setzt die Berechtigungen der Zieldateien auf die gleichen wie die Quelldateien.
      • -t --times- Legt die Änderungszeiten der Zieldateien auf die gleichen wie die Quelldateien fest. Da die Synchronisierung dieser Zeiten den rsync-Algorithmus effizienter macht, möchten Sie im Allgemeinen immer, dass dieser explizit oder implizit verwendet wird.
      • -g --group- Setzt das Gruppenattribut des Ziels auf das gleiche wie die Quelle. Assoziiert standardmäßig nach Namen, greift jedoch unter bestimmten Umständen auf die Gruppen-ID zurück. Wenn der empfangende rsync nicht als Superuser ausgeführt wird (oder ihn vortäuscht --fake-super), können nur Gruppen festgelegt werden, denen der Benutzer angehört, der rsync auf der empfangenden Seite aufgerufen hat. Andernfalls wird die Gruppe nur auf die zuvor erwähnte Standardgruppe desselben Benutzers gesetzt.
      • -D- Entspricht den Optionen --devicesund --specialszusammen. Sie meinen:
        • --devices- Zeichen- und Blockgerätedateien werden übertragen. Hat keine Auswirkung, wenn der empfangende rsync nicht als Superuser ausgeführt wird (oder ihn vortäuscht --fake-super).
        • --specials - Spezielle Dateien (wie Sockets) werden übertragen (sonst nicht).
  • --delete- Weist rsync an, Dateien zu löschen, die sich am Ziel, aber nicht an der Quelle befinden. Dies wird NICHT durch die oben festgelegte Aktualisierungsoption beeinflusst (in der Tat, wie könnte es sein, da die meisten Dateisysteme nicht die erforderlichen Daten speichern, um festzustellen, welche Aktion neuer war?). Diese Option wirkt sich nach der Wildcard / Glob-Erweiterung auf die Quellen aus , sodass dir / * nicht mit dir / identisch ist. Einige wichtige Hinweise:
    • Das ist natürlich gefährlich. Sie sollten es wahrscheinlich zuerst mit der --dry-runOption versuchen , die eine vorgetäuschte Übertragung durchführt, mit der Sie sicherstellen können, dass keine unbeabsichtigten Änderungen vorgenommen werden.
    • Wenn E / A-Fehler (Eingabe / Ausgabe) auftreten, dh wenn beim Übertragen, Lesen oder Schreiben von Änderungen ein Fehler auftritt, wird das Löschen ab diesem Zeitpunkt ignoriert. Dies kann mit der --ignore-errorsOption überschrieben werden , obwohl Sie dies wahrscheinlich nicht tun / wollen.
    • Es gibt verschiedene Variationen des Löschalgorithmus, über die Sie in der Manpage mehr lesen können. Wenn der empfangende rsync Version 3.0.0 oder neuer ist (zum Zeitpunkt dieses Schreibens), wird der --delete-duringAlgorithmus verwendet. Wenn der Empfänger älter ist, --delete-beforewird verwendet. Wenn es wichtig ist, dass die Dateien im Falle eines Fehlers eine bestimmte Konsistenz beibehalten (z. B. nichts löschen, bis alle anderen Änderungen vorgenommen wurden), sollten Sie eine spezifischere Option als die Standardoption verwenden.

Befehlsorte:

  • /srv/bkp01- Die Quelldatei oder das Quellverzeichnis. Es gibt einige detaillierte Regeln, was es bedeutet, wenn am Ende des Verzeichnisses ein Schrägstrich steht / nicht und ob das andere Verzeichnis vorhanden ist. Sie können den Abschnitt USAGE der Manpage für die Details sehen, aber hier bedeutet das Fehlen eines abschließenden Schrägstrichs, dass dieses Verzeichnis in das Ziel kopiert wird, anstatt dass der Inhalt dieses Verzeichnisses in das Ziel kopiert wird. Gleiches gilt, wenn dies eher eine Datei als ein Verzeichnis ist.
  • /srv/offbk2/- Das Zielverzeichnis. Im Allgemeinen ist dies immer das letzte Element, das im Befehlsabschnitt rsync aufgeführt ist, es sei denn, eine Option wird verwendet, um es an einer anderen Stelle im Befehl anzugeben.

Shell-Ausgabeumleitung:

Shell-Befehle:

  • >- Dadurch wird stdout (die Standardausgabe) von links auf die Datei rechts umgeleitet, wird zu deren Inhalt und erstellt die Datei (falls möglich), falls sie noch nicht vorhanden ist. Einige Notizen:
    • Sie können stderr (die Standardfehlerausgabe) auch in dieselbe Datei umleiten, indem Sie 2>&1am Ende des obigen Befehls hinzufügen . Ordnung ist wichtig, also verallgemeinern Sie sorgfältig, wo Sie das platzieren sollen. Die magische Zahl 1bezieht sich auf stdout, 2bezieht sich auf stderr, &ist (im Wesentlichen) "die Adresse von", und das vollständige Befehls-Snippet bedeutet "die Ausgabe von stderr in den stdout-Stream umleiten".
    • Wenn Sie an die Protokolldatei anhängen möchten, anstatt sie zu ersetzen, können Sie sie >>stattdessen verwenden. Die Methode zum Umleiten von stderr an denselben Ort bleibt unverändert.
    • Sie können stdout und stderr mithilfe von an verschiedene Orte senden 1> stdout_file 2> stderr_file. Sie können dies auch >>anstelle von >in diesem Befehl verwenden, indem Sie anhängen anstatt zu ersetzen.

Shell-Variablen / spezielle Symbole:

  • ~ - Dies ist eine Abkürzung für das Home-Verzeichnis des aktuellen Benutzers und Teil des nächsten Bits.

Standorte auf Shell-Ebene:

  • ~/offbkp01.log- die Datei offbkp01.log im Home-Verzeichnis des aktuellen Benutzers. Hier wird die Ausgabe des Befehls rsync aufgrund der Umleitung mit abgelegt >.

Zusammenfassung:

Zusammenfassend wird dieser Befehl:

  • Kopieren Sie alle regulären Dateien, Verzeichnisse, Symlinks, Spezialdateien und Gerätedateien
  • sowie die meisten, wenn nicht alle wichtigen Dateiattribute ,
  • von /srv/bkp01 ,
  • zu /srv/offbk2/bkp01 ,
  • und es löscht alles /srv/offbk2/, was nicht in ist/srv/bkp01 , unter den folgenden Bedingungen:

    • Wenn eine normale Datei, ein Verzeichnis oder Symlink (?) Hat eine Änderung der Zeit auf , /srv/offbk2/ dass neuer ist als ihre Änderungszeit auf /srv/bkp01, wird es nicht aktualisiert werden , wenn beiden Elemente noch sind vom gleichen Typ (normale Datei, ein Verzeichnis oder Symlink (? )).
  • Darüber hinaus druckt rsync einige Informationen darüber aus, was es tut (insbesondere, welche Dateien übertragen werden, und eine endgültige Zusammenfassung ), die die Shell in die Datei schreibt~/offbkp01.log . Diese Protokolldatei wird neu erstellt, wenn sie noch nicht vorhanden ist, und überschrieben, wenn sie bereits vorhanden ist.


NB: --fake-superist eine Option, mit der rsync Superuser-Aktivitäten simuliert. Dazu werden die erweiterten Attribute der Dateien verwendet, um die Attribute zu speichern, die ohne größere Berechtigungen nicht festgelegt werden konnten. Die tatsächliche Version jedes Attributs wird auf den Wert eingestellt, der angesichts der verfügbaren Optionen und Berechtigungen sinnvoll ist. Dies macht es zwar bequem, einige Backups zu erstellen, auch wenn Sie keine Superuser-Berechtigungen haben. Beachten Sie jedoch, dass dies ein Sicherheitsrisiko darstellen kann, das größer ist als die Verwendung von rsync im Allgemeinen, da die tatsächlichen Sicherheitsattribute möglicherweise nicht festgelegt werden richtig, obwohl die Informationen über sie gesichert wurden.


Quelle: viel Zeit mit rsync zu arbeiten und seine Manpage zu lesen .


8
Das ist ein beeindruckender erster Beitrag. Hoffe du bleibst dabei!
Terdon

Ich zweite @terdon .. Verdammt! Er brennt. Machen Sie weiter so mit dem guten Arbeitskollegen. Dies ist in der Tat eine beeindruckende Antwort.
AzkerM

Die Antwort scheint wie "Sherlock Holmes" zu sein, ich liebe Ihren Erklärungsstil.
Rahul Patil

9

Aus dem Handbuch:

--löschen

Dies weist rsync an, fremde Dateien von der empfangenden Seite zu löschen (solche, die nicht auf der sendenden Seite liegen), jedoch nur für die Verzeichnisse, die synchronisiert werden. Sie müssen rsync aktiviert haben, um das gesamte Verzeichnis (z. B. "dir" oder "dir /") zu senden, ohne einen Platzhalter für den Inhalt des Verzeichnisses zu verwenden (z. B. "dir / *"), da der Platzhalter durch die Shell erweitert wird und rsync somit eine Anforderung erhält um einzelne Dateien zu übertragen, nicht das übergeordnete Verzeichnis der Dateien. Dateien, die von der Übertragung ausgeschlossen sind, werden ebenfalls vom Löschen ausgeschlossen, es sei denn, Sie verwenden die Option --delete-ausgeschlossen oder markieren die Regeln als nur auf der sendenden Seite übereinstimmend (siehe Modifikatoren zum Einschließen / Ausschließen im Abschnitt FILTERREGELN).

Es werden also Dateien vom Ziel gelöscht, die nicht Teil des ursprünglichen Verzeichnisses sind, wenn Sie keine Platzhalter verwendet haben.

Quellverzeichnis:

1.txt
2.txt
3.txt

Zielverzeichnis:

4.txt

4.txt wird nach dem rsync entfernt und 1.txt, 2.txt und 3.txt werden am Ziel sein.


In Bezug auf die anderen Dinge:

uva
  • Dateien aktualisieren
  • ausführlich: Echoergebnisse an Terminal senden (dh in Ihre Protokolldatei umleiten, also ja zur letzten Frage)
  • Archiv: Archivierungsmodus; gleich -rlptgoD (kein -H, -A, -X)


3

Nein, es werden nur fremde Dateien aus dem bkp01Verzeichnis gelöscht .

Ebenfalls:

  • -u, --update- Dateien überspringen, die auf dem Empfänger neuer sind
  • -v, --verbose- Ausführlichkeit erhöhen
  • -a, --archive- Archivierungsmodus; gleich -rlptgoD (kein -H, -A, -X)

Die Ausgabe des rsync -uva --delete /srv/bkp01 /srv/offbk2/Befehls wird ~/offbkp01.logmit dem Umleitungsoperator ( >) in eine Datei gesendet , um in Ihrem Terminal gedruckt zu werden. Wenn die Datei nicht vorhanden ist, wird sie erstellt. Wenn die Datei vorhanden ist, wird der alte Inhalt gelöscht.

Siehe man rsyncfür weitere Informationen.


3
Es wird nichts von gelöscht bkp01. Es werden nur fremde Dateien - dh solche, die nicht in der Quelle vorhanden sind - vom Ziel gelöscht.
Matt Nordhoff

Es werden keine Dateien aus bkp01 gelöscht.
Xavier J

1
rsync 

Remote-Dateikopie - Synchronisieren Sie Dateibäume über lokale Festplatten, Verzeichnisse oder über ein Netzwerk.

-u update 

-v verbose

-a archive


--delete --> delete

Hier werden Dateien in offbk2 gelöscht .

Dann wird die Ausgabe des Ergebnisses (Erfolg oder nicht) in diese Protokolldatei umgeleitet.


Es werden keine Dateien aus bkp01 gelöscht.
Xavier J
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.