Quelqu'un peut-il m'expliquer cette commande rsync?


11

Quelqu'un peut-il me dire ce que cela fait?

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

Est-ce qu'il supprime bkp01et offbk2envoie un journal à offbkp01.log?


Il ne peut pas lire les pages de manuel. Qu'est-ce qui vous fait penser qu'il lit les réponses ici? XD
Twinkles

2
Qui a besoin de pages de manuel quand vous avez expliquéhell.com/ …?!
Tom

Réponses:


33

Pour diviser cela en plusieurs parties, il existe deux sections principales, suivies d'un résumé et de notes:

  • La rsynccommande:
    rsync -uva --delete /srv/bkp01 /srv/offbk2/
  • la redirection de sortie effectuée par le shell exécutant la commande rsync:
    rsync-command > ~/offbkp01.log

rsync commander:

Commande de base:

  • rsync - Je suppose que cela n'a besoin d'aucune explication (mais fournira si demandé).

Options de commande:

  • -uva - Un ensemble d'options de caractère unique, étant (forme courte puis longue montrée):

    • -u --update- Indique à rsync que toutes les modifications ne doivent s'appliquer qu'aux fichiers de la destination qui ont le même âge (et des tailles différentes) ou plus anciens que ceux de la source. Autrement dit, rsync ne devrait transmettre que les modifications de la source qui mettraient à jour la destination, mais il ne devrait pas apporter de modifications qui feraient d'un fichier de destination une ancienne version.

      Il y a quelques exceptions. Les différences de type (par exemple, l'un est un fichier, l'autre est un répertoire) entraîneront une mise à jour indépendamment des dates. Les liens symboliques et autres fichiers spéciaux ignorent cette option. Et, ce qui est important, cela n'affecte pas les fichiers à supprimer.

    • -v --verbose- Augmente la quantité d'informations que rsync imprime lors de l'exécution. Sans cela, rsync n'imprimera (presque?) Rien. Avec cette option telle quelle, rsync vous indiquera quels fichiers sont transférés et mettra un résumé à la fin. Plus vs augmentent les informations imprimées, bien que la page de manuel indique que plus de deux vs ne doivent être utilisés que lors du débogage.
    • -a --archive- Cela équivaut à plusieurs autres options ( -rlptgD) regroupées. Comme son nom l'indique, c'est un moyen rapide de définir de nombreuses options courantes pour l'archivage de fichiers et de répertoires. Ce sera:
      • -r --recursive- Indique à rsync de copier les répertoires de manière récursive. Sans cela, ou l' -d --dirsoption plus particulière , rsync ignorerait simplement tous les répertoires qu'il a rencontrés (et vous en parlerait dans sa sortie).
      • -l --links- Lorsque la source est un lien symbolique, créez un lien symbolique sur la destination. Selon d'autres options, les liens symboliques peuvent sinon être ignorés ou transformés en une copie distincte complète (c'est-à-dire un véritable répertoire avec le contenu (ou une autre copie du fichier) au lieu du lien symbolique).
      • -p --perms - Définit les autorisations des fichiers de destination sur les mêmes que les fichiers source.
      • -t --times- Définit les heures de modification des fichiers de destination sur les mêmes que les fichiers source. Étant donné que le fait de garder ces temps synchronisés rend l'algorithme rsync plus efficace, vous souhaitez généralement que celui-ci soit utilisé, explicitement ou implicitement.
      • -g --group- Définit l'attribut de groupe de la destination sur le même que la source. Associés par nom par défaut, mais se replieront sur le numéro d'identification du groupe dans certaines circonstances. Si le rsync de réception n'est pas exécuté en tant que super-utilisateur (ou en le simulant --fake-super), seuls les groupes dont l'utilisateur qui a appelé rsync du côté de réception est membre peuvent être définis. Sinon, le groupe sera simplement défini sur le groupe par défaut du même utilisateur mentionné précédemment.
      • -D- Equivalent aux options --deviceset --specialsensemble. Ils veulent dire:
        • --devices- Les fichiers de caractères et de périphériques bloqués sont transférés. N'a aucun effet si le rsync récepteur n'est pas exécuté en tant que super-utilisateur (ou simulé avec --fake-super).
        • --specials - Des fichiers spéciaux (comme les sockets) sont transférés (ils ne le seraient pas autrement).
  • --delete- Indique à rsync de supprimer les fichiers qui se trouvent sur la destination, mais pas sur la source. Cela n'est PAS affecté par l'option de mise à jour définie ci-dessus (en effet, comment cela pourrait-il être puisque la plupart des systèmes de fichiers ne conserveront pas les données nécessaires pour voir quelle action était la plus récente?). Cette option agit sur les sources après l' expansion des caractères génériques / glob, donc dir / * n'est pas la même chose que dir /. Quelques notes importantes:
    • C'est évidemment dangereux. Vous devriez probablement l'essayer d'abord avec l' --dry-runoption, qui effectuera un prétendu transfert qui vous permettra de vous assurer qu'aucune modification involontaire n'est apportée.
    • S'il y a des erreurs d'E / S (entrée / sortie) - c'est-à-dire, si quelque chose se passe mal lors du transfert, de la lecture ou de l'écriture des modifications - la suppression sera ignorée à partir de ce moment. Cela peut être annulé avec l' --ignore-errorsoption, bien que vous ne souhaitiez / ne fassiez probablement pas cela.
    • Il existe plusieurs variantes de l'algorithme de suppression, dont vous pouvez lire plus dans la page de manuel. Lorsque le rsync de réception est la version 3.0.0 ou plus récente (au moment de la rédaction de cet article), l' --delete-duringalgorithme est utilisé. Si le récepteur est plus ancien, alors --delete-beforeest utilisé. S'il est important que les fichiers conservent une certaine sorte de cohérence en cas d'erreur (comme ne rien supprimer jusqu'à ce que toutes les autres modifications soient apportées), vous devez utiliser une option plus spécifique que celle par défaut.

Emplacements des commandes:

  • /srv/bkp01- Le fichier ou répertoire source. Il y a des règles détaillées sur ce que cela signifie s'il y a / n'est pas une barre oblique à la fin du répertoire et si l'autre répertoire existe. Vous pouvez voir la section USAGE de la page de manuel pour les détails, mais ici l'absence d'une barre oblique de fin signifie que ce répertoire sera copié dans la destination, plutôt que le contenu de ce répertoire étant copié dans la destination. Même chose s'il s'agit d'un fichier plutôt que d'un répertoire.
  • /srv/offbk2/- Le répertoire de destination. En général, ce sera toujours le dernier élément répertorié dans la section de commande rsync, sauf si une option est utilisée pour le spécifier ailleurs dans la commande.

Redirection de sortie de Shell:

Commandes shell:

  • >- Cela redirige stdout (la sortie standard) de tout ce qui se trouve à gauche vers le fichier à droite, devenant son contenu et créant le fichier (si possible) s'il n'existe pas déjà. Quelques notes:
    • Vous pouvez également rediriger stderr (la sortie d'erreur standard) vers le même fichier en ajoutant 2>&1à la fin de la commande ci-dessus. L'ordre est important, alors soyez prudent en généralisant où mettre cela. Le nombre magique 1fait référence à stdout, 2fait référence à stderr, &est (essentiellement) "l'adresse de", et l'extrait de commande complet signifie "redirige la sortie de stderr dans le flux stdout".
    • Si vous souhaitez ajouter au fichier journal au lieu de le remplacer, vous pouvez utiliser à la >>place. La méthode pour rediriger stderr au même endroit reste la même.
    • Vous pouvez envoyer stdout et stderr à différents endroits en utilisant 1> stdout_file 2> stderr_file. Vous pouvez également utiliser >>au lieu de >dans cette commande pour le faire en ajoutant au lieu de remplacer.

Variables de shell / symboles spéciaux:

  • ~ - Ceci est un raccourci pour le répertoire personnel de l'utilisateur actuel et fait partie du bit suivant.

Emplacements au niveau du shell:

  • ~/offbkp01.log- le fichier offbkp01.log dans le répertoire personnel de l'utilisateur actuel. C'est là que la sortie de la commande rsync sera placée à cause de la redirection avec >.

Résumé:

En résumé, cette commande:

  • Copiez tous les fichiers, répertoires, liens symboliques, fichiers spéciaux et fichiers de périphérique standard
  • ainsi que la plupart, sinon la totalité, des attributs de fichier importants ,
  • de /srv/bkp01 ,
  • à /srv/offbk2/bkp01 ,
  • et il supprimera tout ce /srv/offbk2/qui ne l'est pas/srv/bkp01 , avec les conditions suivantes:

    • Si un fichier régulier, un répertoire ou un lien symbolique (?) A un temps de modification sur /srv/offbk2/ qui est plus récente que son temps de modification sur /srv/bkp01, il ne sera pas mis à jour , si les deux éléments sont toujours le même type (fichier régulier, un répertoire ou un lien symbolique (? )).
  • De plus, rsync imprimera certaines informations sur ce qu'il fait (en particulier, quels fichiers sont transférés et un résumé final ), que le shell écrira dans le fichier ~/offbkp01.log . Ce fichier journal sera recréé s'il n'existe pas déjà et sera remplacé s'il existe déjà.


NB: --fake-superest une option utilisée pour que rsync simule les activités des super-utilisateurs. Pour ce faire, il utilise les attributs étendus des fichiers pour stocker les attributs qu'il ne pourrait pas définir sans disposer de privilèges supérieurs. La version réelle de chaque attribut est définie sur ce qui a du sens compte tenu des options et des privilèges disponibles. Bien que cela facilite la réalisation de certaines sauvegardes même si vous ne disposez pas de privilèges de super-utilisateur, il convient également de noter que cela peut poser un risque de sécurité supérieur à l'utilisation de rsync en général, car les attributs de sécurité réels peuvent ne pas être définis. correctement, même si les informations les concernant ont été sauvegardées.


Source: beaucoup de temps pour travailler avec rsync et lire sa page de manuel .


8
C'est un premier post impressionnant. J'espère que vous resterez!
terdon

J'appuie @terdon .. Merde! il est en feu. Continuez votre bon collègue de travail. C'est en effet une réponse impressionnante.
AzkerM

La réponse semble être comme "sherlock holmes", j'adore ton style d'explication ..
Rahul Patil

9

Du manuel:

--supprimer

Cela indique à rsync de supprimer les fichiers superflus du côté réception (ceux qui ne sont pas du côté envoi), mais uniquement pour les répertoires qui sont synchronisés. Vous devez avoir rsync pour envoyer le répertoire entier (par exemple "dir" ou "dir /") sans utiliser de caractère générique pour le contenu du répertoire (par exemple "dir / *") car le caractère générique est développé par le shell et rsync obtient donc une demande pour transférer des fichiers individuels, pas le répertoire parent des fichiers. Les fichiers qui sont exclus du transfert sont également exclus de la suppression, sauf si vous utilisez l'option --delete-exclus ou marquez les règles comme ne correspondant que du côté de l'envoi (voir les modificateurs d'inclusion / exclusion dans la section RÈGLES DE FILTRE).

Il supprimera donc les fichiers de la destination qui ne font pas partie du répertoire d'origine si vous n'avez pas utilisé de caractères génériques.

Répertoire source:

1.txt
2.txt
3.txt

Répertoire de destination:

4.txt

4.txt disparaîtra après le rsync et 1.txt, 2.txt et 3.txt seront sur la destination.


Concernant les autres choses:

uva
  • mettre à jour les fichiers
  • verbose: écho des résultats vers le terminal (ie. redirigez-le vers votre fichier journal donc oui à la dernière question)
  • archive: mode archive; est égal à -rlptgoD (pas de -H, -A, -X)


3

Non, il supprime uniquement les fichiers superflus du bkp01répertoire.

Aussi:

  • -u, --update- ignorer les fichiers plus récents sur le récepteur
  • -v, --verbose- augmenter la verbosité
  • -a, --archive- mode archive; est égal à -rlptgoD (pas de -H, -A, -X)

La sortie de la rsync -uva --delete /srv/bkp01 /srv/offbk2/commande est envoyée au ~/offbkp01.logfichier à l'aide de l' opérateur de redirection ( >) à la place pour être imprimée dans votre terminal. Si le fichier n'existe pas, il sera créé. Si le fichier existe, l'ancien contenu sera effacé.

Voir man rsyncpour plus d'informations.


3
Il ne supprime rien de bkp01. Il supprime simplement les fichiers superflus - c'est-à-dire ceux qui n'existent pas dans la source - de la destination.
Matt Nordhoff

Aucun fichier ne sera supprimé de bkp01.
Xavier J

1
rsync 

Copie de fichiers à distance - Synchronisez les arborescences de fichiers sur des disques locaux, des répertoires ou sur un réseau.

-u update 

-v verbose

-a archive


--delete --> delete

Ici, il supprimera les fichiers dans offbk2 .

Ensuite, la sortie du résultat (réussi ou non) sera redirigée vers ce fichier journal.


Aucun fichier ne sera supprimé de bkp01.
Xavier J
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.