Introducere
Rsync, care înseamnă „remote sync”, este un instrument de sincronizare a fișierelor locale și la distanță. Folosește un algoritm care minimizează cantitatea de date copiate prin mutarea doar a porțiunilor de fișiere care s-au modificat.
În acest ghid, vom acoperi utilizarea de bază a acestui utilitar puternic.
Ce este Rsync?
Rsync este un instrument de sincronizare foarte flexibil, activat în rețea. Datorită omniprezenței sale pe Linux și pe sistemele de tip Unix și popularității sale ca instrument pentru scripturile de sistem, este inclus în majoritatea distribuțiilor Linux în mod implicit.
Sintaxa de bază
Sintaxa de bază a rsync
este foarte simplă și funcționează într-un mod similar cu ssh, scp și cp.
Vom crea două directoare de test și câteva fișiere de test cu următoarele comenzi:
- cd ~
- mkdir dir1
- mkdir dir2
- touch dir1/file{1..100}
Acum avem un director numit dir1
cu 100 de fișiere goale în el.
- ls dir1
Outputfile1 file18 file27 file36 file45 file54 file63 file72 file81 file90file10 file19 file28 file37 file46 file55 file64 file73 file82 file91file100 file2 file29 file38 file47 file56 file65 file74 file83 file92file11 file20 file3 file39 file48 file57 file66 file75 file84 file93file12 file21 file30 file4 file49 file58 file67 file76 file85 file94file13 file22 file31 file40 file5 file59 file68 file77 file86 file95file14 file23 file32 file41 file50 file6 file69 file78 file87 file96file15 file24 file33 file42 file51 file60 file7 file79 file88 file97file16 file25 file34 file43 file52 file61 file70 file8 file89 file98file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Avem, de asemenea, un director gol numit dir2
.
Pentru a sincroniza conținutul din dir1
cu dir2
pe același sistem, tastați:
- rsync -r dir1/ dir2
Opțiunea -r
înseamnă recursiv, ceea ce este necesar pentru sincronizarea directoarelor.
Am putea folosi, de asemenea, stegulețul -a
în loc de acesta:
- rsync -a dir1/ dir2
Opțiunea -a
este un steguleț de combinație. Aceasta înseamnă „arhivă” și sincronizează recursiv și păstrează legăturile simbolice, fișierele speciale și de dispozitiv, orele de modificare, grupul, proprietarul și permisiunile. Este mai frecvent utilizată decât -r
și este, de obicei, cea pe care doriți să o folosiți.
O notă importantă
Ați observat probabil că există o bară oblică finală (/
) la sfârșitul primului argument în comenzile de mai sus:
- rsync -a dir1/ dir2
Este necesar pentru a însemna „conținutul lui dir1
„. Alternativa, fără bară oblică finală, ar plasa dir1
, inclusiv directorul, în dir2
. Acest lucru ar crea o ierarhie care ar arăta astfel:
- ~/dir2/dir1/
Controlați-vă întotdeauna de două ori argumentele înainte de a executa o comandă rsync. Rsync oferă o metodă de a face acest lucru prin trecerea opțiunilor -n
sau --dry-run
. Steagul -v
(pentru verbose) este, de asemenea, necesar pentru a obține o ieșire corespunzătoare:
- rsync -anv dir1/ dir2
Outputsending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .
Comparați această ieșire cu cea pe care o obținem atunci când eliminăm bara oblică finală:
- rsync -anv dir1 dir2
Outputsending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .
Vezi aici că directorul în sine este transferat.
Cum să folosiți Rsync pentru a vă sincroniza cu un sistem la distanță
Sincronizarea cu un sistem la distanță este trivială dacă aveți acces SSH la mașina la distanță și rsync
instalat pe ambele părți. Odată ce ați verificat accesul SSH între cele două mașini, puteți sincroniza folderul dir1
de mai devreme pe un computer la distanță folosind această sintaxă (rețineți că în acest caz dorim să transferăm directorul real, așa că omitem bara oblică finală):
- rsync -a ~/dir1 username@remote_host:destination_directory
Această operațiune se numește „push” deoarece împinge un director de pe sistemul local pe un sistem la distanță. Operațiunea opusă este „pull”. Aceasta este utilizată pentru a sincroniza un director de la distanță cu sistemul local. Dacă dir1
s-ar afla pe sistemul de la distanță în loc de sistemul nostru local, sintaxa ar fi:
- rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
Ca și cp
și alte instrumente similare, sursa este întotdeauna primul argument, iar destinația este întotdeauna al doilea.
Opțiuni utile pentru Rsync
Rsync oferă multe opțiuni pentru modificarea comportamentului implicit al utilitarului. Am discutat deja unele dintre cele mai necesare stegulețe.
Dacă transferați fișiere care nu au fost deja comprimate, cum ar fi fișierele text, puteți reduce transferul în rețea prin adăugarea compresiei cu opțiunea -z
:
- rsync -az source destination
Stegulețul -P
este foarte util. Acesta combină stegulețele --progress
și --partial
. Primul dintre acestea vă oferă o bară de progres pentru transferuri, iar cel de-al doilea vă permite să reluați transferurile întrerupte:
- rsync -azP source destination
Outputsending incremental file list./file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)file100 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)file11 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101). . .
Dacă executăm din nou comanda, vom obține o ieșire mai scurtă, deoarece nu au fost efectuate modificări. Acest lucru ilustrează capacitatea lui rsync de a utiliza timpii de modificare pentru a determina dacă au fost efectuate modificări.
- rsync -azP source destination
Outputsending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00
Potem actualiza timpul de modificare al unora dintre fișiere și vedem că rsync copiază inteligent doar fișierele modificate:
- touch dir1/file{1..10}
- rsync -azP source destination
Outputsending incremental file listfile1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101). . .
Pentru a menține două directoare cu adevărat sincronizate, este necesar să ștergem fișierele din directorul de destinație dacă acestea sunt eliminate din cel sursă. În mod implicit, rsync nu șterge nimic din directorul de destinație.
Potem schimba acest comportament cu opțiunea --delete
. Înainte de a folosi această opțiune, folosiți opțiunea --dry-run
și faceți teste pentru a preveni pierderea de date:
- rsync -a --delete source destination
Dacă doriți să excludeți anumite fișiere sau directoare aflate în interiorul unui director pe care îl sincronizați, puteți face acest lucru specificându-le într-o listă separată prin virgulă după opțiunea --exclude=
:
- rsync -a --exclude=pattern_to_exclude source destination
Dacă am specificat un model de excludere, putem anula această excludere pentru fișierele care corespund unui model diferit folosind opțiunea --include=
.
- rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
În cele din urmă, opțiunea --backup
a lui rsync poate fi utilizată pentru a stoca copii de rezervă ale fișierelor importante. Se utilizează împreună cu opțiunea --backup-dir
, care specifică directorul în care trebuie stocate fișierele de rezervă.
- rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
Concluzie
Rsync poate simplifica transferurile de fișiere prin conexiuni în rețea și poate adăuga robustețe la sincronizarea directoarelor locale. Flexibilitatea lui rsync îl face o opțiune bună pentru multe operații diferite la nivel de fișier.
O stăpânire a rsync vă permite să proiectați operații complexe de backup și să obțineți un control fin asupra a ceea ce este transferat și cum.