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.