16 praktičnih primjera Rsync naredbe u Linuxu


Rsync (Remote Sync) je naredba koja se najčešće koristi za kopiranje i sinhronizaciju datoteka i direktorija na daljinu, kao i lokalno u Linux/Unix sistemima.

Uz pomoć naredbe rsync, možete kopirati i sinhronizirati svoje podatke na daljinu i lokalno preko direktorija, diskova i mreža, napraviti sigurnosne kopije podataka i preslikati između dvije Linux mašine.

Ovaj članak objašnjava 16 osnovnih i naprednih upotreba naredbe rsync za daljinski i lokalni prijenos vaših datoteka na Linux baziranim mašinama. Ne morate biti root korisnik da pokrenete naredbu rsync.

Prednosti Rsync komande

Nudi nekoliko prednosti, uključujući:

  • Efikasan prijenos datoteka – rsync koristi algoritam delta prijenosa, što znači da prenosi samo razlike između izvornih i odredišnih datoteka, što značajno smanjuje količinu prenesenih podataka, čineći ga efikasnim za sinhronizaciju velikih datoteka ili direktorija.
  • Udaljena sinhronizacija datoteka – rsync podržava i lokalni i udaljeni prijenos datoteka preko SSH-a, što omogućava sinhronizaciju između lokalnih i udaljenih sistema ili preslikavanje direktorija na više računala.
  • Inkrementalne sigurnosne kopije – rsync je pogodan za inkrementalne sigurnosne kopije, jer efikasno kreira i ažurira sigurnosne kopije prenoseći samo nove ili izmijenjene datoteke.
  • Čuva dozvole datoteke – rsync može sačuvati različite atribute datoteke, kao što su dozvole, vlasništvo, vremenske oznake i simboličke veze, što osigurava da kopirane datoteke zadrže svoje originalne karakteristike na odredištu.
  • Kontrola propusnog opsega – rsync vam omogućava da ograničite korištenje propusnog opsega tokom prijenosa datoteka, jer koristi metodu kompresije i dekompresije dok šalje i prima podatke na oba kraja.
  • Brže – rsync može biti brži od scp-a (Secure Copy) za prijenos datoteka, posebno kada se sinkroniziraju veliki direktoriji ili kada se radi s datotekama koje su već djelomično prenesene ili postoje na odredištu.

Sintaksa naredbe Rsync

Komanda rsync slijedi sljedeću sintaksu:

rsync [OPTIONS] SOURCE DESTINATION

Evo objašnjenja različitih komponenti i opcija koje se koriste s naredbama rsync:

  • -v – Opširni izlaz, koji prikazuje detaljne informacije o prijenosu.
  • -r – kopira podatke rekurzivno (ali ne čuva vremenske oznake i dozvole prilikom prijenosa podataka.
  • -a – arhivski režim, koji omogućava rekurzivno kopiranje fajlova i takođe čuva simboličke veze, dozvole za fajlove, vlasništvo korisnika i grupa i vremenske oznake.
  • -z – Komprimirajte datoteke tokom prijenosa da biste smanjili korištenje mreže.
  • -h – ljudski čitljivi, izlazni brojevi u formatu čitljivom za ljude.
  • -P – Prikaži napredak tokom prijenosa.
  • SOURCE – Određuje izvorni fajl(e) ili direktorijum koji će se prenijeti, a to može biti lokalna ili udaljena lokacija.
  • ODREDIŠTE – Određuje odredišnu putanju na koju će datoteke ili direktoriji biti kopirani. Slično izvoru, to može biti lokalna staza ili udaljena lokacija.

Instalirajte Rsync u Linux sistemu

Paket rsync možemo instalirati uz pomoć sljedećeg menadžera paketa prema vašoj Linux distribuciji.

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. Lokalno kopirajte/sinhronizirajte datoteku

Da biste kopirali ili sinhronizirali datoteku lokalno, možete koristiti sljedeću naredbu koja će sinkronizirati jednu datoteku na lokalnom računalu s jedne lokacije na drugu lokaciju.

Ovdje u ovom primjeru, naziv datoteke backup.tar treba kopirati ili sinhronizirati u folder /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

U gornjem primjeru možete vidjeti da ako odredište već ne postoji, rsync će automatski kreirati direktorij za odredište.

2. Lokalno kopiraj/sinhroniziraj direktorij

Sljedeća naredba će prenijeti ili sinkronizirati sve datoteke iz jednog direktorija u drugi direktorij na istom stroju.

Ovdje u ovom primjeru, /root/rpmpkgs sadrži neke rpm datoteke paketa i želite da se taj direktorij kopira unutar /tmp/backups/ foldera.

[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. Kopirajte direktorij s lokalnog na udaljeni poslužitelj

Da biste kopirali direktorij s lokalnog poslužitelja na udaljeni poslužitelj, možete koristiti sljedeću naredbu koja će sinkronizirati direktorij s lokalnog na udaljeni stroj.

Na primjer, ako na vašem lokalnom računaru postoji folder “rpmpkgs ” koji sadrži neke RPM pakete i ako želite da se sadržaj tog lokalnog direktorija pošalje na udaljeni server, možete koristiti sljedeću naredbu.

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. Kopirajte direktorij sa udaljenog na lokalni server

Ova naredba će vam pomoći da sinkronizirate udaljeni direktorij s lokalnim direktorijem. Ovdje u ovom primjeru, direktorij /root/rpmpkgs koji se nalazi na udaljenom serveru se kopira na vaš lokalni računar u /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 preko SSH-a

Sa rsync, možemo koristiti SSH (Secure Shell) za prijenos podataka, koristeći SSH protokol dok prenosimo naše podatke možete biti sigurni da se vaši podaci prenose u zaštićenoj vezi sa enkripcijom tako da niko ne može pročitati vaše podatke dok se prenose putem žice na internetu.

Također kada koristimo rsync moramo obezbijediti korisničku/root lozinku da izvršimo taj određeni zadatak, tako da koristimo SSH će poslati vaše prijave na šifriran način tako da će vaša lozinka biti sigurna.

Da biste koristili rsync preko SSH, možete koristiti opciju -e da navedete komandu udaljene ljuske, koja je obično ssh kao što je prikazano.

rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination

6. Kopirajte datoteku sa udaljenog servera na lokalni server sa SSH-om

Da biste sinhronizirali datoteku sa udaljenog servera na lokalni server, možete odrediti protokol sa rsync koristeći opciju “-e ” sa imenom protokola koji želite koristiti.

Ovdje, u ovom primjeru, koristit ćemo “ssh ” sa “-e” opcijom i izvršiti prijenos podataka.

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. Kopirajte datoteku sa lokalnog servera na udaljeni server sa SSH-om

Da biste sinhronizovali datoteku sa lokalnog servera na udaljeni server koristeći SSH, možete koristiti sledeću naredbu kao što je prikazano.

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. Prikažite napredak prilikom prijenosa podataka pomoću Rsync

Da bismo prikazali napredak prilikom prijenosa podataka s jedne mašine na drugu mašinu, možemo koristiti opciju '--progress', koja prikazuje datoteke i preostalo vrijeme za završetak prijenosa.

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. Uključite datoteke s određenim ekstenzijom uz Rsync

Da biste uključili određene datoteke ili obrasce tokom rsync operacije, možete koristiti opciju --include sa ekstenzijom koja odgovara svim datotekama.

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

U datom primjeru, rsync će uključiti samo datoteke sa ekstenzijom .txt iz direktorija /path/to/source/ tokom prijenosa.

10. Izuzmite datoteke s posebnim nastavkom pomoću Rsync

Slično, da biste isključili određenu ekstenziju tokom rsync operacije, možete koristiti opciju --exclude sa džoker šablonom.

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

U navedenom primjeru, rsync će isključiti datoteke sa specificiranom ekstenzijom (*.ext) tokom prijenosa, dok će uključiti sve ostale datoteke i direktorije.

11. Uključi i izuzmi datoteke pomoću Rsync

Da biste uključili i isključili određene datoteke ili obrasce tokom rsync operacije, možete koristiti obje opcije --include i --exclude sa odgovarajućim džoker šablonima.

Ove dvije opcije nam omogućavaju da uključimo i isključimo datoteke navođenjem parametara. Ova opcija nam pomaže da navedemo one datoteke ili direktorije koje želite da uključite u svoju sinhronizaciju i isključimo datoteke i mape sa kojim ne želite da budete prebačeni.

Ovdje u ovom primjeru, naredba rsync će uključiti samo one datoteke i direktorije koji počinju s ‘R’ i isključiti sve ostale datoteke i direktorije.

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

12. Upotreba opcije –delete sa Rsync

Ako datoteka ili direktorij ne postoji na izvoru, ali već postoji na odredištu, možda ćete htjeti izbrisati tu postojeću datoteku/direktorij na cilju tijekom sinkronizacije.

Možemo koristiti opciju ‘--delete‘ za brisanje datoteka koje nisu u izvornom direktoriju.

Izvor i cilj su sinkronizirani. Sada kreirajte novi fajl test.txt na cilju.

[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 ima novi fajl pod nazivom test.txt kada se sinhronizuje sa izvorom sa opcijom '–delete', uklonio je fajl test.txt .

13. Postavite ograničenje prijenosa datoteka pomoću Rsync

Možete odrediti Maksimalna veličinu datoteke za prijenos ili sinhronizaciju. To možete učiniti s opcijom “--max-size”. Ovdje u ovom primjeru, maksimalna veličina datoteke je 200k, tako da će ova komanda prenijeti samo one datoteke koje su jednake ili manje od 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. Automatski izbrišite izvorne datoteke nakon prijenosa

Sada, pretpostavimo da imate glavni web server i server za sigurnosnu kopiju podataka, kreirali ste dnevnu sigurnosnu kopiju i sinkronizirali je sa svojim backup serverom, ali sada ne želite zadržati tu lokalnu kopiju sigurnosne kopije na svom web serveru.

Dakle, hoćete li pričekati da se prijenos završi, a zatim ručno izbrisati tu lokalnu sigurnosnu kopiju? Naravno da ne. Ovo automatsko brisanje se može obaviti pomoću opcije „--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. Uradite suho trčanje sa Rsync-om

Ako ste početnik koji koristite rsync i ne znate šta će tačno vaša komanda učiniti. Rsync bi zaista mogao zabrljati stvari u vašoj odredišnoj mapi, a onda poništavanje može biti zamoran posao.

Upotreba ove opcije neće napraviti nikakve promjene u datotekama i prikazuje izlaz naredbe, ako se na izlazu pokaže potpuno isti kao što želite, tada možete ukloniti '--dry-run ' opciju iz vaše komande i pokrenite na terminalu.

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 Postavite ograničenje propusnosti i prijenos datoteke

Možete postaviti ograničenje propusnog opsega dok prenosite podatke s jedne mašine na drugu uz pomoć opcije „--bwlimit“. Ova opcija nam pomaže da ograničimo I/O propusni opseg.

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

Također, prema zadanim postavkama rsync sinkronizira samo promijenjene blokove i bajtove, ako eksplicitno želite sinkronizirati cijelu datoteku, tada koristite opciju '-W' s njom.

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
Zaključak

Time je završen naš pregled rsynca i njegovih mogućnosti. Za dalje istraživanje njegovih opsežnih opcija i funkcionalnosti, preporučujem vam da pogledate dostupne sveobuhvatne stranice priručnika (man stranice).