Hoe Rsync te gebruiken om lokale en externe mappen te synchroniseren

Introductie

Rsync, wat staat voor remote sync, is een hulpmiddel voor het synchroniseren van bestanden op afstand en lokaal. Het maakt gebruik van een algoritme om de hoeveelheid gekopieerde gegevens te minimaliseren door alleen de delen van bestanden te verplaatsen die zijn gewijzigd.

In deze handleiding zullen we Rsync definiëren, de syntaxis bij het gebruik van rsync bekijken, uitleggen hoe Rsync te gebruiken om te synchroniseren met een extern systeem, en andere beschikbare opties.

Implementeer uw frontend-applicaties vanuit GitHub met behulp van DigitalOcean App Platform. Laat DigitalOcean zich richten op het schalen van uw app.

Vereisten

Om te oefenen met het gebruik van rsync om bestanden tussen een lokaal en een extern systeem te synchroniseren, heeft u twee machines nodig die optreden als uw lokale computer en uw externe machine, respectievelijk. Deze twee machines kunnen virtuele privéservers, virtuele machines, containers of persoonlijke computers zijn, zolang ze maar goed zijn geconfigureerd.

Als je van plan bent om deze handleiding te volgen met servers, is het verstandig om ze in te stellen met beheerdersgebruikers en een firewall te configureren op elk van hen. Volg onze Initiële Serverinstellingen Handleiding om deze servers in te stellen.

Ongeacht welke soorten machines je gebruikt om deze tutorial te volgen, moet je SSH-sleutels hebben aangemaakt op beide. Kopieer vervolgens de openbare sleutel van elke server naar het authorized_keys-bestand van de andere server zoals beschreven in Stap 2 van die handleiding.

Deze handleiding is gevalideerd op machines die Ubuntu 20.04 draaien, hoewel het over het algemeen zou moeten werken met computers die een op Linux gebaseerd besturingssysteem hebben en waarop rsync is geïnstalleerd.

Definiëren van Rsync

Rsync is een zeer flexibel, netwerkgeactiveerd synchronisatiehulpmiddel. Vanwege de alomtegenwoordigheid op Linux en Unix-achtige systemen en de populariteit als een tool voor systeemscripts, is het standaard op de meeste Linux-distributies inbegrepen.

Begrijpen van Rsync Syntax

De syntaxis voor rsync werkt op een vergelijkbare manier als andere tools, zoals ssh, scp en cp.

Eerst, verander naar je home directory door het volgende commando uit te voeren:

  1. cd ~

Vervolgens maak een testmap aan:

  1. mkdir dir1

Maak nog een testmap aan:

  1. mkdir dir2

Voeg nu enkele testbestanden toe:

  1. touch dir1/file{1..100}

Er is nu een map genaamd dir1 met 100 lege bestanden erin. Bevestig dit door de bestanden op te sommen:

  1. ls dir1
Output
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99

Je hebt ook een lege map genaamd dir2. Om de inhoud van dir1 naar dir2 op hetzelfde systeem te synchroniseren, voer je rsync uit en gebruik je de -r-vlag, die staat voor “recursief” en noodzakelijk is voor het synchroniseren van mappen:

  1. rsync -r dir1/ dir2

Een andere optie is om de -a-vlag te gebruiken, wat een combinatievlag is en staat voor “archief”. Deze vlag synchroniseert recursief en behoudt symbolische koppelingen, speciale en apparaatbestanden, wijzigingstijden, groepen, eigenaars en rechten. Het wordt vaker gebruikt dan -r en is de aanbevolen vlag om te gebruiken. Voer hetzelfde commando uit als het vorige voorbeeld, maar gebruik deze keer de -a-vlag:

  1. rsync -a dir1/ dir2

Houd er rekening mee dat er een schuine streep (/) staat aan het einde van het eerste argument in de syntaxis van de twee voorgaande commando’s en hier gemarkeerd:

  1. rsync -a dir1/ dir2

Deze schuine streep geeft de inhoud van dir1 aan. Zonder de schuine streep zou dir1, inclusief de map, binnen dir2 worden geplaatst. Het resultaat zou een hiërarchie creëren zoals de volgende:

~/dir2/dir1/[files]

Een andere tip is om je argumenten te controleren voordat je een rsync-opdracht uitvoert. Rsync biedt hiervoor een methode door de opties -n of --dry-run door te geven. De -v-vlag, wat “uitgebreid” betekent, is ook nodig om de juiste uitvoer te krijgen. Je combineert de a, n en v vlaggen in de volgende opdracht:

  1. rsync -anv dir1/ dir2
Output
sending incremental file list ./ file1 file10 file100 file11 file12 file13 file14 file15 file16 file17 file18 . . .

Vergelijk nu die uitvoer met degene die je krijgt wanneer je de schuine streep aan het einde verwijdert, zoals in het volgende:

  1. rsync -anv dir1 dir2
Output
sending incremental file list dir1/ dir1/file1 dir1/file10 dir1/file100 dir1/file11 dir1/file12 dir1/file13 dir1/file14 dir1/file15 dir1/file16 dir1/file17 dir1/file18 . . .

Deze uitvoer laat nu zien dat de map zelf is overgedragen, in plaats van alleen de bestanden binnen de map.

Het gebruik van Rsync om te synchroniseren met een extern systeem

Om rsync te gebruiken om te synchroniseren met een extern systeem, heb je alleen SSH-toegang nodig die geconfigureerd is tussen je lokale en externe machines, evenals rsync geïnstalleerd op beide systemen. Nadat je SSH-toegang hebt geverifieerd tussen de twee machines, kun je de map dir1 uit de vorige sectie synchroniseren met een extern systeem door de volgende syntaxis te gebruiken. Let in dit geval op dat je de daadwerkelijke map wilt overdragen, dus je laat de schuine streep aan het einde weg:

  1. rsync -a ~/dir1 username@remote_host:destination_directory

Dit proces wordt een push-operatie genoemd omdat het een map van het lokale systeem naar een extern systeem “duwt”. De tegenovergestelde operatie is pull, en wordt gebruikt om een externe map te synchroniseren met het lokale systeem. Als de map dir1 zich op het externe systeem bevond in plaats van op uw lokale systeem, zou de syntaxis als volgt zijn:

  1. rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine

Net als bij cp en vergelijkbare tools is de bron altijd het eerste argument en de bestemming altijd het tweede.

Het Gebruik van Andere Rsync Opties

Rsync biedt veel opties om het standaardgedrag van het hulpprogramma te wijzigen, zoals de vlagopties die u in de vorige sectie hebt geleerd.

Als u bestanden overdraagt die nog niet zijn gecomprimeerd, zoals tekstbestanden, kunt u het netwerkverkeer verminderen door compressie toe te voegen met de -z-optie:

  1. rsync -az source destination

De -P-vlag is ook nuttig. Het combineert de vlaggen --progress en --partial. De eerste vlag geeft een voortgangsbalk voor de overdrachten, en de tweede vlag maakt het mogelijk onderbroken overdrachten te hervatten:

  1. rsync -azP source destination
Output
sending incremental file list created directory destination source/ source/file1 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=99/101) sourcefile10 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=98/101) source/file100 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=97/101) source/file11 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=96/101) source/file12 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=95/101) . . .

Als u het commando opnieuw uitvoert, krijgt u een verkorte uitvoer omdat er geen wijzigingen zijn aangebracht. Dit illustreert het vermogen van Rsync om wijzigingstijden te gebruiken om te bepalen of er wijzigingen zijn aangebracht:

  1. rsync -azP source destination
Output
sending incremental file list sent 818 bytes received 12 bytes 1660.00 bytes/sec total size is 0 speedup is 0.00

Stel dat u de wijzigingstijd van sommige bestanden zou bijwerken met een opdracht als de volgende:

  1. touch dir1/file{1..10}

Dan, als je opnieuw rsync zou uitvoeren met -azP, zul je in de uitvoer merken hoe Rsync intelligent alleen de gewijzigde bestanden opnieuw kopieert:

  1. rsync -azP source destination
Output
sending incremental file list file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101) file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101) file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101) file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101) . . .

Om twee mappen echt gesynchroniseerd te houden, is het noodzakelijk om bestanden uit de doelmappen te verwijderen als ze uit de bron zijn verwijderd. Standaard verwijdert rsync niets uit de doelmappen.

Je kunt dit gedrag wijzigen met de --delete-optie. Voordat je deze optie gebruikt, kun je -n, de --dry-run-optie, gebruiken om een test uit te voeren om ongewenst gegevensverlies te voorkomen:

  1. rsync -an --delete source destination

Als je bepaalde bestanden of mappen wilt uitsluiten die zich in een te synchroniseren map bevinden, kun je dat doen door ze op te geven in een door komma’s gescheiden lijst na de --exclude=-optie:

  1. rsync -a --exclude=pattern_to_exclude source destination

Als je een specifiek patroon hebt om uit te sluiten, kun je die uitsluiting overschrijven voor bestanden die overeenkomen met een ander patroon door de --include=-optie te gebruiken:

  1. rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

Tenslotte kan de --backup-optie van Rsync worden gebruikt om back-ups van belangrijke bestanden op te slaan. Het wordt gebruikt in combinatie met de --backup-dir-optie, die aangeeft in welke map de back-upbestanden moeten worden opgeslagen:

  1. rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

Conclusie

Rsync kan het overdragen van bestanden over netwerkverbindingen stroomlijnen en robuustheid toevoegen aan het synchroniseren van lokale mappen. De flexibiliteit van Rsync maakt het een goede optie voor veel verschillende bestandsniveau-operaties.

A mastery of Rsync allows you to design complex backup operations and obtain fine-grained control over how and what is transferred.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories