Hoe de Rsync-opdracht in Linux te gebruiken: 16 praktische voorbeelden

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.

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.

Rsync Local Files

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
Rsync Local Directory

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
Rsync Directory Remote System

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
Rsync Remote Directory to Local

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
Rsync Copy Remote File to Local

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
Rsync Copy Local File to Remote

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
Rsync Progress While Copying Files

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
Rsync Include and Exclude Files

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.

Rsync Delete Option

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
Rsync Set Max File Transfer Size

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
Rsync Delete Source File After Transfer

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)
Rsync 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/