Rsync (Remote Sync) is het meest gebruikte commando voor het kopiëren en synchroniseren van bestanden en mappen op afstand en lokaal in Linux/Unix-systemen.
Met behulp van het rsync-commando kunt u uw gegevens op afstand en lokaal kopiëren en synchroniseren tussen mappen, schijven en netwerken, gegevensback-ups uitvoeren en spiegelen tussen twee Linux-machines.
Dit artikel legt 16 basis- en geavanceerde toepassingen van het rsync-commando uit om uw bestanden op afstand en lokaal over te zetten in Linux-gebaseerde machines. U hoeft geen root-gebruiker te zijn om het rsync-commando uit te voeren.
Inhoudsopgave
Voordelen van Rsync Commando
Het biedt verschillende voordelen, waaronder:
- Efficiënte Bestandsoverdracht – rsync maakt gebruik van een delta-overdrachtsalgoritme, wat betekent dat het alleen de verschillen tussen bron- en doelbestanden overdraagt, wat de hoeveelheid overgedragen gegevens aanzienlijk vermindert, waardoor het efficiënt is voor het synchroniseren van grote bestanden of mappen.
- Externe Bestandssynchronisatie – rsync ondersteunt zowel lokale als externe bestandsoverdrachten via SSH, wat synchronisatie tussen lokale en externe systemen mogelijk maakt of het spiegelen van mappen over meerdere machines.
- Incrementele Back-ups – rsync is goed geschikt voor incrementele back-ups, omdat het efficiënt back-ups maakt en bijwerkt door alleen nieuwe of gewijzigde bestanden over te dragen.
- Behoudt bestandsrechten – rsync kan verschillende bestandsattributen behouden, zoals rechten, eigendom, tijdstempels en symbolische koppelingen, wat ervoor zorgt dat de gekopieerde bestanden hun oorspronkelijke kenmerken behouden op de bestemming.
- Bandbreedtebeheer – rsync stelt u in staat om tijdens bestandsoverdrachten het bandbreedtegebruik te beperken, omdat het compressie- en decompressiemethode gebruikt bij het verzenden en ontvangen van gegevens aan beide uiteinden.
- Sneller – rsync kan sneller zijn dan scp (Secure Copy) voor het overbrengen van bestanden, vooral bij het synchroniseren van grote mappen of bij het omgaan met bestanden die al gedeeltelijk zijn overgebracht of op de bestemming bestaan.
Rsync-opdrachtsyntax
De rsync-opdracht volgt de volgende syntaxis:
# rsync [OPTIONS] SOURCE DESTINATION
Hier is een uitleg van de verschillende componenten en opties die worden gebruikt bij rsync-opdrachten:
-v
– Geeft uitgebreide uitvoer weer, met gedetailleerde informatie over de overdracht.-r
– kopieert gegevens recursief (maar behoudt geen tijdstempels en rechten tijdens het overbrengen van gegevens).-a
– archiefmodus, waarmee bestanden recursief worden gekopieerd en het behoudt ook symbolische koppelingen, bestandsrechten, gebruikers- en groepseigenaarschap en tijdstempels.-z
– Comprimeer bestanden tijdens de overdracht om het netwerkgebruik te verminderen.-h
– menselijk leesbaar, uitvoergetallen in een menselijk leesbaar formaat.-P
– Toon voortgang tijdens de overdracht.SOURCE
– Specificeert het bronbestand(en) of de bronmap die moet worden overgebracht, die een lokale of een externe locatie kan zijn.DESTINATION
– Specificeert het doelpad waar de bestanden of mappen naartoe worden gekopieerd. Vergelijkbaar met de bron kan dit een lokaal pad of een externe locatie zijn.
Installeer Rsync in Linux Systeem
We kunnen het rsync-pakket installeren met behulp van de volgende pakketbeheerder, afhankelijk van je Linux-distributie.
$ sudo apt install rsync [On Debian, Ubuntu and Mint] $ sudo yum install rsync [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] $ sudo emerge -a sys-apps/rsync [On Gentoo Linux] $ sudo apk add rsync [On Alpine Linux] $ sudo pacman -S rsync [On Arch Linux] $ sudo zypper install rsync [On OpenSUSE]
1. Kopieer/Synchroniseer Bestand Lokaal
Om een bestand lokaal te kopiëren of synchroniseren, kun je de volgende opdracht gebruiken die een enkel bestand synchroniseert op een lokale machine vanaf een andere locatie.
Hier in dit voorbeeld moet een bestand met de naam backup.tar worden gekopieerd of gesynchroniseerd naar de map /tmp/backups/.
[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/ created directory /tmp/backups backup.tar.gz sent 224.54K bytes received 70 bytes 449.21K bytes/sec total size is 224.40K speedup is 1.00
In het bovenstaande voorbeeld kun je zien dat als de bestemming nog niet bestaat, rsync automatisch een map voor de bestemming zal aanmaken.

2. Map/Sync Map Lokaal
De volgende opdracht zal alle bestanden van een map naar een andere map op dezelfde machine overbrengen of synchroniseren.
Hier in dit voorbeeld bevat /root/rpmpkgs enkele rpm-pakketbestanden en wilt u dat de map wordt gekopieerd naar de map /tmp/backups/.
[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/ sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.47M bytes received 96 bytes 2.32M bytes/sec total size is 3.74M speedup is 1.08

3. Kopieer een map van lokaal naar een externe server
Om een map van een lokale server naar een externe server te kopiëren, kunt u de volgende opdracht gebruiken, die een map van een lokale naar een externe machine synchroniseert.
Bijvoorbeeld, als er een map op uw lokale computer is genaamd “rpmpkgs” die enkele RPM-pakketten bevat en als u wilt dat de inhoud van die lokale map naar een externe server wordt verzonden, kunt u de volgende opdracht gebruiken.
# rsync -avzh /root/rpmpkgs [email protected]:/root/ The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established. ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts. [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.74M bytes received 96 bytes 439.88K bytes/sec total size is 3.74M speedup is 1.00

4. Kopieer een map van een externe naar een lokale server
Met deze opdracht kunt u een externe map synchroniseren naar een lokale map. Hier in dit voorbeeld wordt een map /root/rpmpkgs die zich op een externe server bevindt, gekopieerd naar uw lokale computer in /tmp/myrpms.
# rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms [email protected]'s password: receiving incremental file list created directory /tmp/myrpms rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 104 bytes received 3.49M bytes 997.68K bytes/sec total size is 3.74M speedup is 1.07

5. Rsync Over SSH
Met rsync kunnen we SSH (Secure Shell) gebruiken voor gegevensoverdracht, waarbij we het SSH-protocol gebruiken tijdens de overdracht van onze gegevens, zodat u ervan verzekerd kunt zijn dat uw gegevens worden overgedragen via een beveiligde verbinding met encryptie, zodat niemand uw gegevens kan lezen terwijl ze worden overgedragen via het internet.
Bovendien, wanneer we rsync gebruiken, moeten we het gebruikers/root-wachtwoord opgeven om die specifieke taak uit te voeren, dus door de SSH-optie te gebruiken, worden uw logins op een versleutelde manier verzonden, zodat uw wachtwoord veilig zal zijn.
Om rsync via SSH te gebruiken, kunt u de -e
-optie gebruiken om het externe shell-commando op te geven, meestal ssh zoals getoond.
# rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
6. Kopieer een bestand van een externe server naar een lokale server met SSH
Om een bestand van een externe server naar een lokale server te synchroniseren, kunt u een protocol opgeven met rsync met behulp van de “-e” optie met de naam van het protocol dat u wilt gebruiken.
Hier in dit voorbeeld zullen we “ssh” gebruiken met de “-e” optie en gegevensoverdracht uitvoeren.
# rsync -avzhe ssh [email protected]:/root/anaconda-ks.cfg /tmp [email protected]'s password: receiving incremental file list anaconda-ks.cfg sent 43 bytes received 1.10K bytes 325.43 bytes/sec total size is 1.90K speedup is 1.67

7. Kopieer een bestand van een lokale server naar een externe server met SSH
Om een bestand van een lokale server naar een externe server te synchroniseren met behulp van SSH, kunt u het volgende commando gebruiken zoals getoond.
# rsync -avzhe ssh backup.tar.gz [email protected]:/backups/ [email protected]'s password: sending incremental file list created directory /backups backup.tar.gz sent 224.59K bytes received 66 bytes 64.19K bytes/sec total size is 224.40K speedup is 1.00

8. Toon voortgang tijdens het overbrengen van gegevens met Rsync
Om de voortgang te tonen tijdens het overbrengen van gegevens van de ene machine naar een andere machine, kunnen we de optie ‘--progress'
gebruiken, die de bestanden en de resterende tijd om de overdracht te voltooien weergeeft.
# rsync -avzhe ssh --progress /root/rpmpkgs [email protected]:/root/rpmpkgs [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5) rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5) rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm 2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5) rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm 120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5) sent 3.74M bytes received 96 bytes 1.50M bytes/sec total size is 3.74M speedup is 1.00

9. Bestanden met een specifieke extensie opnemen met Rsync
Om specifieke bestanden of patronen op te nemen tijdens een rsync-operatie, kunt u de optie --include
gebruiken met een extensie die overeenkomt met alle bestanden.
# rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/
In het meegeleverde voorbeeld zal rsync alleen bestanden met de extensie .txt
opnemen uit de map /pad/naar/bron/ tijdens de overdracht.
10. Bestanden met een specifieke extensie uitsluiten met Rsync
Vergelijkbaar, om een specifieke extensie uit te sluiten tijdens een rsync-operatie, kunt u de optie --exclude
gebruiken met een wildcard-patroon.
# rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/
In het gegeven voorbeeld zal rsync bestanden met de gespecificeerde extensie (*.ext) uitsluiten tijdens de overdracht, terwijl alle andere bestanden en mappen worden opgenomen.
11. Bestanden opnemen en uitsluiten met Rsync
Om specifieke bestanden of patronen op te nemen en uit te sluiten tijdens een rsync-operatie, kunt u zowel de –include- als de –exclude-opties gebruiken met de juiste wildcard-patronen.
Met deze twee opties kunnen we bestanden opnemen en uitsluiten door parameters op te geven. Deze opties helpen ons bij het specificeren van bestanden of mappen die u wilt opnemen in uw synchronisatie en het uitsluiten van bestanden en mappen die u niet wilt overbrengen.
In dit voorbeeld zal het rsync-commando alleen bestanden en mappen opnemen die beginnen met ‘R’ en alle andere bestanden en mappen uitsluiten.
# rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm

12. Gebruik van de optie –delete met Rsync
Als een bestand of map niet bestaat op de bron, maar al wel bestaat op de bestemming, wilt u mogelijk dat bestaande bestand/map op de doellocatie verwijderen tijdens het synchroniseren.
We kunnen de ‘–delete’-optie gebruiken om bestanden te verwijderen die niet in de bronmap staan.
De bron en de bestemming zijn gesynchroniseerd. Maak nu een nieuw bestand test.txt op de bestemming.
[root@tecmint:~]# cd /root/rpm/ [root@tecmint:~/rpm]# touch test.txt [root@tecmint:~/rpm]# rsync -avz --delete [email protected]:/var/lib/rpm/ /root/rpm/ [email protected]'s password: receiving incremental file list deleting test.txt ./ .dbenv.lock .rpm.lock Basenames Conflictname Dirnames Enhancename Filetriggername Group Installtid Name Obsoletename Packages Providename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.001 __db.002 __db.003 sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec total size is 71,151,616 speedup is 3.84
Het doel heeft het nieuwe bestand genaamd test.txt wanneer het synchroniseert met de bron met de ‘--delete
‘ optie, het verwijderde het bestand test.txt.

13. Stel Bestandsoverdrachtslimiet in met Rsync
U kunt de maximale bestandsgrootte specificeren die moet worden overgedragen of gesynchroniseerd. U kunt dit doen met de optie “--max-size
”. Hier in dit voorbeeld is de maximale bestandsgrootte 200k, dus deze opdracht zal alleen die bestanden overbrengen die gelijk zijn aan of kleiner zijn dan 200k.
# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email protected]:/root/tmprpm [email protected]'s password: sending incremental file list created directory /root/tmprpm ./ .dbenv.lock .rpm.lock Conflictname Enhancename Filetriggername Group Installtid Name Obsoletename Recommendname Requirename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.002 sent 129.52K bytes received 396 bytes 28.87K bytes/sec total size is 71.15M speedup is 547.66

14. Verwijder automatisch bronbestanden na overdracht
Stel dat u de hoofdwebserver en een gegevensback-upserver heeft, u heeft een dagelijkse back-up gemaakt en gesynchroniseerd met uw back-upserver, maar nu wilt u die lokale kopie van de back-up niet op uw webserver bewaren.
Dus, wacht u tot de overdracht is voltooid en verwijdert u vervolgens dat lokale back-upbestand handmatig? Natuurlijk NIET. Deze automatische verwijdering kan worden gedaan met behulp van de ‘--remove-source-files
‘ optie.
# rsync --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 795 bytes received 2.33K bytes 894.29 bytes/sec total size is 267.30K speedup is 85.40 [root@tecmint:~]# ls -l backup.tar.gz ls: cannot access 'backup.tar.gz': No such file or directory

15. Voer een Proefrun uit met Rsync
Als u een nieuwkomer bent die rsync gebruikt en niet weet wat precies uw opdracht gaat doen. Rsync kan echt de dingen in uw doelmap verpesten en het ongedaan maken kan dan een lastige klus zijn.
Gebruik van deze optie zal geen wijzigingen aanbrengen in de bestanden en toont de uitvoer van de opdracht, als de uitvoer precies hetzelfde laat zien als wat je wilt doen, dan kun je de ‘--dry-run
‘ optie uit je opdracht verwijderen en uitvoeren in de terminal.
# rsync --dry-run --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 50 bytes received 19 bytes 19.71 bytes/sec total size is 267.30K speedup is 3,873.97 (DRY RUN)

16. Rsync Stel Bandbreedtebeperking in en Verplaats Bestand
Je kunt de bandbreedtebeperking instellen tijdens het overbrengen van gegevens van de ene machine naar de andere machine met behulp van de ‘--bwlimit
‘ optie. Deze optie helpt ons om de I/O bandbreedte te beperken.
# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ [email protected]:/root/tmprpm/ [email protected]'s password: sending incremental file list sent 324 bytes received 12 bytes 61.09 bytes/sec total size is 38.08M speedup is 113347.05
Ook, standaard synchroniseert rsync alleen gewijzigde blokken en bytes, als je expliciet het hele bestand wilt synchroniseren, dan gebruik je de ‘-W‘ optie ermee.
# rsync -zvhW backup.tar /tmp/backups/backup.tar backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10
Conclusie
Dat concludeert ons overzicht van rsync en zijn mogelijkheden. Voor verdere verkenning van zijn uitgebreide opties en functionaliteiten, raad ik je aan te verwijzen naar de uitgebreide handleiding (man pagina’s) die beschikbaar zijn.
Source:
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/