Zoeken op website

16 praktische voorbeelden van Rsync-opdracht in Linux


Rsync (Remote Sync) is de meest gebruikte opdracht voor het kopiëren en synchroniseren van bestanden en mappen, zowel op afstand als lokaal in Linux/Unix-systemen.

Met behulp van de opdracht rsync 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.

In dit artikel worden 16 basis- en geavanceerde toepassingen van de opdracht rsync uitgelegd om uw bestanden op afstand en lokaal over te dragen naar Linux-gebaseerde machines. U hoeft geen root-gebruiker te zijn om de opdracht rsync uit te voeren.

Voordelen van Rsync-opdracht

Het biedt verschillende voordelen, waaronder:

  • Efficiënte bestandsoverdracht – rsync gebruikt een delta-overdrachtsalgoritme, wat betekent dat het alleen de verschillen tussen bron- en doelbestanden overdraagt, waardoor de hoeveelheid overgedragen gegevens aanzienlijk wordt verminderd, waardoor het efficiënt is voor het synchroniseren van grote bestanden of mappen.
  • Bestandssynchronisatie op afstand – rsync ondersteunt zowel lokale als externe bestandsoverdracht via SSH, waardoor synchronisatie tussen lokale en externe systemen of het spiegelen van mappen over meerdere machines mogelijk is.
  • Incrementele back-ups – rsync is zeer 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 bestandskenmerken behouden, zoals rechten, eigendom, tijdstempels en symbolische links, wat ervoor zorgt dat de gekopieerde bestanden hun originele kenmerken op de bestemming behouden.
  • Bandbreedtecontrole – met rsync kunt u het bandbreedtegebruik tijdens bestandsoverdrachten beperken, omdat het compressie- en decompressiemethoden gebruikt bij het verzenden en ontvangen van gegevens aan beide kanten.
  • 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 overgedragen of op de bestemming aanwezig zijn.

Rsync-opdrachtsyntaxis

De opdracht rsync volgt de volgende syntaxis:

rsync [OPTIONS] SOURCE DESTINATION

Hier volgt een uitleg van de verschillende componenten en opties die worden gebruikt met rsync-opdrachten:

  • -v – Uitgebreide uitvoer, met gedetailleerde informatie over de overdracht.
  • -r – kopieert gegevens recursief (maar bewaart geen tijdstempels en toestemming tijdens het overbrengen van gegevens.
  • -a – archiefmodus, waarmee bestanden recursief kunnen worden gekopieerd en ook symbolische links, bestandsrechten, gebruikers- en groepseigendom en tijdstempels behouden blijven.
  • -z – Comprimeer bestanden tijdens de overdracht om het netwerkgebruik te verminderen.
  • -h – voor mensen leesbaar, uitvoernummers in een voor mensen leesbaar formaat.
  • -P – Toon voortgang tijdens de overdracht.
  • BRON – Specificeert de bronbestanden of map die moeten worden overgedragen, wat een lokale of externe locatie kan zijn.
  • DESTINATION – Specificeert het bestemmingspad waar de bestanden of mappen naartoe worden gekopieerd. Net als 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 uw 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. Bestand lokaal kopiëren/synchroniseren

Om een bestand lokaal te kopiëren of te synchroniseren, kunt u de volgende opdracht gebruiken, waarmee een enkel bestand op een lokale computer van de ene naar de andere locatie wordt gesynchroniseerd.

In dit voorbeeld moet een bestandsnaam 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 kunt u zien dat, als de bestemming nog niet bestaat, rsync automatisch een map voor de bestemming zal aanmaken.

2. Directory lokaal kopiëren/synchroniseren

Met de volgende opdracht worden alle bestanden van de ene map naar een andere map op dezelfde machine overgebracht of gesynchroniseerd.

In dit voorbeeld bevat /root/rpmpkgs enkele rpm-pakketbestanden en u wilt dat die 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 de lokale naar de externe server

Om een map van een lokale server naar een externe server te kopiëren, kunt u de volgende opdracht gebruiken, waarmee een map van een lokale naar een externe machine wordt gesynchroniseerd.

Bijvoorbeeld als er een map op uw lokale computer is “rpmpkgs ” die enkele RPM pakketten bevat en als u wilt dat de inhoud van die lokale map wordt verzonden naar een externe server, kunt u de volgende opdracht gebruiken.

rsync -avzh /root/rpmpkgs [email :/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 '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 directory van externe naar lokale server

Met deze opdracht kunt u een externe map met een lokale map synchroniseren. In dit voorbeeld wordt een map /root/rpmpkgs die zich op een externe server bevindt, naar uw lokale computer gekopieerd in /tmp/myrpms.

rsync -avzh [email :/root/rpmpkgs /tmp/myrpms

[email '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 via SSH

Met rsync kunnen we SSH (Secure Shell) gebruiken voor gegevensoverdracht. Door het SSH-protocol te gebruiken, kunt u er tijdens het overbrengen van onze gegevens zeker van zijn dat uw gegevens in een beveiligde verbinding worden overgedragen met encryptie zodat niemand uw gegevens kan lezen terwijl deze via internet worden verzonden.

Ook als we rsync gebruiken, moeten we het user/root wachtwoord opgeven om die specifieke taak uit te voeren, dus gebruiken we de SSH optie verzendt uw logins op een gecodeerde manier, zodat uw wachtwoord veilig is.

Om rsync via SSH te gebruiken, kun je de optie -e gebruiken om het externe shell-commando op te geven, wat doorgaans ssh is, zoals weergegeven.

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 optie “-e” met de protocolnaam die u wilt gebruiken.

In dit voorbeeld gebruiken we de “ssh” met de “-e” optie en voeren we gegevensoverdracht uit.

rsync -avzhe ssh [email :/root/anaconda-ks.cfg /tmp

[email '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 de volgende opdracht gebruiken, zoals weergegeven.

rsync -avzhe ssh backup.tar.gz [email :/backups/

[email '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 de voortgang tijdens het overbrengen van gegevens met Rsync

Om de voortgang te tonen tijdens het overbrengen van de gegevens van de ene machine naar een andere machine, kunnen we de optie ‘--progress' gebruiken, die de bestanden weergeeft en de resterende tijd om de overdracht te voltooien.

rsync -avzhe ssh --progress /root/rpmpkgs [email :/root/rpmpkgs

[email '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. Voeg bestanden met een bepaalde extensie toe met Rsync

Om specifieke bestanden of patronen op te nemen tijdens een rsync-bewerking, 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 gegeven voorbeeld zal rsync tijdens de overdracht alleen bestanden opnemen met de extensie .txt uit de map /path/to/source/.

10. Sluit bestanden met een bepaalde extensie uit met Rsync

Op dezelfde manier kunt u, om een specifieke extensie uit te sluiten tijdens een rsync-bewerking, de optie --exclude gebruiken met een jokertekenpatroon.

rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/

In het gegeven voorbeeld zal rsync tijdens de overdracht bestanden met de opgegeven extensie (*.ext) uitsluiten, terwijl alle andere bestanden en mappen worden opgenomen.

11. Bestanden opnemen en uitsluiten met Rsync

Om specifieke bestanden of patronen tijdens een rsync-bewerking op te nemen of uit te sluiten, kunt u zowel de opties --include als --exclude gebruiken met de juiste jokertekenpatronen.

Met deze twee opties kunnen we bestanden opnemen en uitsluiten door parameters op te geven. Deze optie helpt ons de bestanden of mappen te specificeren die u in uw synchronisatie wilt opnemen en bestanden en mappen uit te sluiten waarmee u niet wilt worden overgezet.

In dit voorbeeld zal de opdracht rsync alleen die bestanden en mappen bevatten die beginnen met 'R' en alle andere bestanden en mappen uitsluiten.

rsync -avze ssh --include 'R*' --exclude '*' [email :/var/lib/rpm/ /root/rpm

12. Gebruik van de optie –delete met Rsync

Als een bestand of map niet bestaat bij de bron, maar al bestaat op de bestemming, wilt u mogelijk dat bestaande bestand/de map op het doel verwijderen tijdens het synchroniseren.

We kunnen de optie ‘--delete’ gebruiken om bestanden te verwijderen die niet in de bronmap staan.

De bron en het doel zijn gesynchroniseerd. Maak nu een nieuw bestand test.txt op het doel.

[root@tecmint:~]# cd /root/rpm/
[root@tecmint:~/rpm]# touch test.txt
[root@tecmint:~/rpm]# rsync -avz --delete [email :/var/lib/rpm/ /root/rpm/

[email '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

Target heeft het nieuwe bestand met de naam test.txt bij het synchroniseren met de bron met de optie '–delete' werd het bestand test.txt verwijderd .

13. Stel de bestandsoverdrachtlimiet in met Rsync

U kunt de Max bestandsgrootte opgeven die moet worden overgedragen of gesynchroniseerd. U kunt dit doen met de optie “--max-size”. 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 :/root/tmprpm

[email '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. Bronbestanden automatisch verwijderen na overdracht

Stel nu dat u de hoofdwebserver en een gegevensback-upserver heeft. U hebt een dagelijkse back-up gemaakt en deze met uw back-upserver gesynchroniseerd, maar nu wilt u die lokale kopie van de back-up niet op uw webserver bewaren.

Dus, wacht je tot de overdracht is voltooid en verwijder je dat lokale back-upbestand vervolgens handmatig? Natuurlijk niet. Deze automatische verwijdering kan worden gedaan met behulp van de optie ‘--remove-source-files’.

rsync --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email '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 je een nieuweling bent die rsync gebruikt en niet weet wat je commando precies gaat doen. Rsync kan de dingen in uw doelmap echt verpesten, en het ongedaan maken ervan kan een vervelende klus zijn.

Als u deze optie gebruikt, worden er geen wijzigingen in de bestanden aangebracht en wordt de uitvoer van het commando weergegeven. Als de uitvoer precies hetzelfde toont als u wilt, kunt u de '--dry-run verwijderen. ' optie uit uw opdracht en voer deze uit op de terminal.

rsync --dry-run --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email '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 Bandbreedtelimiet instellen en bestand overbrengen

U kunt de bandbreedtelimiet instellen tijdens het overbrengen van gegevens van de ene machine naar een andere machine met behulp van de optie ‘--bwlimit’. Deze optie helpt ons de I/O bandbreedte te beperken.

rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  [email :/root/tmprpm/
[email '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

Bovendien synchroniseert rsync standaard alleen gewijzigde blokken en bytes. Als je expliciet het hele bestand wilt synchroniseren, gebruik je de optie ‘-W’.

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

Dit is het einde van ons overzicht van rsync en de mogelijkheden ervan. Voor verdere verkenning van de uitgebreide opties en functionaliteiten raad ik u aan de uitgebreide beschikbare handleidingpagina's (manpagina's) te raadplegen.