rsync of externe synchronisatie is een softwarehulpprogramma voor Unix-achtige systemen dat bestanden en mappen efficiënt synchroniseert tussen twee hosts of machines. De ene is de bron of de lokale host van waaruit de bestanden worden gesynchroniseerd, de andere is de externe host, waarop de synchronisatie zal plaatsvinden. Er zijn grofweg twee manieren waarop rsync kan gegevens kopiëren/synchroniseren:
- Kopiëren/synchroniseren van/naar een andere host via elke externe shell, zoals ssh , rsh .
- Kopiëren/synchroniseren via rsync-daemon met behulp van TCP.
Rsync staat bekend om zijn delta-overdracht algoritme , waarin het alleen de verschillen kopieert tussen de bronbestanden die aanwezig zijn op de lokale host en de bestaande bestanden op de bestemming of de externe host.
Voorbeeld:
rsync local-file user@remote-host:remote-file>
Wat gebeurt hier:
Rsync gebruikt eerst SSH om verbinding te maken alsuser>naar remote-host en zal erom vragenuser's>wachtwoord. Eenmaal verbonden, zal het de rsync van de externe host aanroepen, en vervolgens zullen de twee programma's bepalen welke delen van het lokale bestand moeten worden gekopieerd, zodat het externe bestand overeenkomt met het lokale bestand. Let op het volgende gedrag van rsync:
- Bestanden die niet op de externe host bestaan, worden gekopieerd.
- Bestanden die zijn bijgewerkt, worden gesynchroniseerd, rsync kopieert alleen de gewijzigde delen van bestanden naar de externe host.
- bestanden die exact hetzelfde zijn, worden niet naar de externe host gekopieerd.
Syntaxis van de opdracht `rsync` in Linux
rsync [options] source [destination]>
Keuze beschikbaar in de opdracht `rsync` in Linux
| Opties | Beschrijving |
|---|---|
| een, –archief | Dit is hetzelfde als gebruiken -rlptgoD . De archiefmodus bevat alle noodzakelijke opties, zoals het recursief kopiëren van bestanden, waarbij bijna alles behouden blijft (zoals symbolische links, bestandsrechten, gebruikers- en groepseigendom en tijdstempels). |
| -v, –uitgebreid | Standaard werkt rsync stil. Het gebruik van een enkele optie -v biedt informatie over overgedragen bestanden en een samenvatting aan het einde. Het toevoegen van twee -v opties geeft statusupdates over delta-transmissie en overgeslagen bestanden, samen met meer informatie aan het einde. Er worden doorgaans meerdere -v-opties gebruikt voor het debuggen van rsync. |
| -h, –door mensen leesbaar formaat | Uitvoer in een voor mensen leesbaar formaat. |
| -z, –comprimeren | Bestandsgegevens comprimeren tijdens de overdracht |
Voorbeelden
`rsync` gebruiken als lijstcommando
Als alleen het bronpad is opgegeven, wordt de inhoud van de bron weergegeven in een uitvoerformaat dat lijkt opls -l>.
rsync foo/>
Met de bovenstaande opdracht worden de bestanden en mappen weergegeven die in de map aanwezig zijn foe .
Uitgang:
Kopieer/synchroniseer bestanden en mappen lokaal
Als noch het bron- noch het bestemmingspad een externe host specificeert, gedragen de rsync-opdrachten zich als een kopieeropdracht.
rsync -avh foo/ bar/>
Met de bovenstaande opdracht worden alle bestanden en mappen in de map gekopieerd/gesynchroniseerdfoo>naar map bar . Als de doelmap niet aanwezig is (hierbar>), maakt rsync er automatisch een aan en kopieert alle gegevens daarin.
Uitgang:
Rsync met behulp van ssh
Er zijn twee verschillende manieren waarop rsync contact kan maken met een extern systeem:
- Met behulp van een extern shell-programma als transport(zoals
ssh>(Secure Shell) ofrsh>(Externe behuizing)). - Rechtstreeks contact opnemen met een rsync-daemon via TCP.
Hier zullen we rsync via ssh bespreken.
rsync -avhze ssh /foo user@remote-host:/tmp/>
Om het type protocol dat moet worden gebruikt op te geven,-e>optie wordt gebruikt.
Uitgang:
Rsync met bepaalde bestandsrechten
Als we bestanden willen synchroniseren met de lokale of externe host waarbij de machtigingen van de bestanden worden gewijzigd. Het volgende commando moet worden gebruikt.
rsync -avhe ssh --chown=USER:GROUP /foo user@remote-host:/tmp/>
Met de bovenstaande opdracht worden alle bestanden in de map gesynchroniseerd /foe met de bestanden die aanwezig zijn in de directory /tmp in deremote-host>met alle bestanden die eigendom zijn van GEBRUIKER met groep GROUP.
Uitgang:
Opmerking: Deuser>Engroup>moet al zijn aangemaakt op de externe host.
Rsync met --ignore-existing-files>
We kunnen ook de reeds bestaande bestanden op de bestemming overslaan. Dit kan over het algemeen worden gebruikt wanneer we back-ups maken met behulp van de –link-dest optie, terwijl u een back-uprun voortzet die werd onderbroken.
rsync --ignore-existing -avhe /foo user@remote-host:/tmp/>
Alle bestanden die niet op de bestemming bestaan, worden dus gekopieerd. Hier heb ik degeeksforgeeks>map uit de mapfoo>, dus het zou alleen degeeksforgeeks>map.
Opmerking: Hierbij worden de bestaande mappen niet genegeerd, anders wordt er niets gedaan. Zelfs als er enkele wijzigingen zijn in een bestand op de lokale host, wordt het nog steeds niet gesynchroniseerd als het aanwezig is op de externe host.
Uitgang:
Toon voortgang tijdens de overdracht
Om de voortgang te tonen tijdens het overbrengen van de gegevens van de lokale host naar de externe host, kunnen we gebruiken-–progress>keuze.
rsync -avhe ssh --progress /foo user@remote-host:/tmp/>
Wanneer de overdracht voor een bepaald bestand is voltooid, voert rsync een samenvattingsregel uit, zoals hieronder weergegeven.
Uitgang:
In de bovenstaande afbeelding, als we naar het bestand kijken/foo/file2>, dat vertelt het ons
- Het bestand was in totaal 44 bytes lang.
- De gemiddelde overdrachtssnelheid voor het hele bestand was 42,97 kilobytes per seconde gedurende de 0:00:00 seconden die nodig waren om het te voltooien.
- Het was de tweede transfer tijdens de huidige rsync sessie.
- Er zijn nog 10 bestanden die de externe host moet controleren (om te zien of ze up-to-date zijn of niet) van de 13 bestanden in de bestandslijst.
Als we bestanden over de externe host willen kopiëren die recentelijk zijn bijgewerkt op het lokale bestandssysteem. Het is klaar met -update vlag. Het gedrag is nu als volgt:
- Bestanden die niet op de externe host bestaan, worden gekopieerd.
- Bestanden die zowel lokaal als op afstand bestaan, maar een nieuwere tijdstempel hebben op de lokale host, worden gekopieerd naar de externe host. (Omgekeerd worden bestanden met een oudere tijdstempel niet gekopieerd).
Hier heb ik enkele wijzigingen aangebracht bestand1 En bestand2 , maar de veranderingen in bestand2 zijn onlangs gedaan. Dus alleen bestand2 wordt gesynchroniseerd.
rsync -avhe ssh --progress --update /foo root@remote-host:/tmp/>
Uitgang: 
Verwijder automatisch bestanden van de lokale host na een succesvolle overdracht
Stel nu dat we een webserver en een back-upserver hebben en dat we een dagelijkse back-up hebben gemaakt en deze hebben gesynchroniseerd met onze back-upserver, en dan willen we de lokale kopie van de back-up niet op onze webserver bewaren. Dus in plaats van het handmatig te verwijderen na een succesvolle overdracht, kunnen we de--remove-source-files>flag om de bestanden automatisch van de webserver te verwijderen.
rsync -avhe ssh --remove-source-files /foo user@backup-server:/tmp>
Uitgang:
Opmerking: Hierdoor worden alleen de bestanden verwijderd en niet de mappen.
Verwijder de bestanden die zijn verwijderd op de lokale host
Als er enkele bestanden zijn die op de lokale host zijn verwijderd en we willen dat deze ook op de externe host worden bijgewerkt, dan moeten we de--delete>keuze.
rsync -avhe ssh /foo --delete user@remote-host:/tmp/>
Uitgang:
wat is maven
Dus hier bestand1 , bestand2 , bestand3 zijn verwijderd op de lokale host, en zoals u kunt zien, worden ze ook bijgewerkt op de externe host.
Opmerking: ` rsync` verwijdert de bestanden niet automatisch om de mappen aan beide kanten te synchroniseren.
Een droogrun uitvoeren met `rsync`
Een proefrun zorgt ervoor dat `rsync` een proefrun uitvoert die geen wijzigingen aanbrengt en vrijwel dezelfde uitvoer weergeeft als een echte run zou doen. Het wordt over het algemeen gebruikt met de opties -v, –verbose en/of -i, –itemize-changes om te zien wat een `rsync`-commando zou doen voordat men het daadwerkelijk uitvoert.
rsync -avhe ssh --dry-run --chown=USER:GROUP /foo user@remote-host:/>
Uitgang:
Conclusie
In dit artikel hebben we de opdracht rsync in Linux besproken, een veelzijdige en krachtige tool voor het synchroniseren van bestanden en mappen tussen hosts of machines. Met zijn delta-transfer-algoritme en verschillende opties biedt het efficiënte gegevenssynchronisatie, back-upmogelijkheden en beheer van bestandsoverdracht. Door de opdracht rsync onder de knie te krijgen, kunnen Linux-gebruikers de consistentie van bestanden garanderen, de gegevensoverdracht optimaliseren en hun gegevensbeheerworkflows stroomlijnen.