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:
Vervolgens maak een testmap aan:
Maak nog een testmap aan:
Voeg nu enkele testbestanden toe:
Er is nu een map genaamd dir1
met 100 lege bestanden erin. Bevestig dit door de bestanden op te sommen:
Outputfile1 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:
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:
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:
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:
Outputsending 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:
Outputsending 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:
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:
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:
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:
Outputsending 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:
Outputsending 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:
Dan, als je opnieuw rsync
zou uitvoeren met -azP
, zul je in de uitvoer merken hoe Rsync intelligent alleen de gewijzigde bestanden opnieuw kopieert:
Outputsending 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:
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:
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:
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:
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.