Utilizarea comenzii rsync pentru a sincroniza fișiere și directoare [11 Examples]

rsync este un instrument gratuit de linie de comandă care vă permite să sincronizați fișierele local și de la distanță. Cu acesta, puteți transfera fișiere și directoare.

Acest lucru îl face foarte util pentru migrarea datelor, efectuarea de copii de rezervă și oglindirea, ceea ce îl face excelent pentru webmasteri și administratori pentru sarcini recurente de transfer de date.

Acest articol ne va învăța cum funcționează Rysnc și ne va oferi câteva exemple utile.

Cum funcționează rsync?

rsync este un utilitar de linie de comandă de sincronizare la distanță pentru sisteme asemănătoare Unix. Acesta oferă utilizatorului posibilitatea de a transfera/sincroniza fișiere între mașini sau două gazde fără probleme.

Sub capotă, rsync folosește algoritmul de transfer delta. Acest algoritm implică copierea diferențelor dintre cele două fișiere pe două gazde (sursă și destinație). Sursa și destinația pot fi locale sau la distanță. Comanda rsync poate efectua sarcini de copiere/sincronizare a datelor în două moduri. Acestea sunt:

  • Utilizați ssh, rsh pentru a copia/sincroniza între două gazde.
  • Utilizați demonul TCP rsync pentru copiere/sincronizare.

Deoarece este proiectat să funcționeze în sisteme asemănătoare Unix, funcționează și în Linux.

Procesul rsync pas cu pas folosește după cum urmează:

  • Rsync folosește SSH pentru a se conecta la gazda de la distanță și solicită o parolă.
  • Odată conectat, rsync-ul gazdei la distanță comunică cu sursa.
  • Aceste programe vor determina apoi fișierele și directoarele care au nevoie de sincronizare. Utilizează un algoritm de transfer delta pentru a verifica diferența dintre fișiere.

Dacă comanda rsync nu găsește un fișier pe telecomandă, dar nu pe gazdă, îl va copia și îl va transfera pe sistemul gazdă. În mod similar, pentru fișierele deja existente (atât pe gazdă, cât și la distanță), va copia diferența dintre ele (adică, părțile schimbate). În cele din urmă, va ignora fișierele existente pe ambele sisteme fără modificări.

Comanda rsync realizează actualizări incrementale prin stocarea diferenței într-un fișier temporar înainte de a-l împinge la destinație.

Inainte sa incepi:

  • Trebuie să aveți privilegii root sau sudo
  • Aveți acces la terminal/linia de comandă
  • Acces SSH pentru rularea în siguranță a comenzilor rsync
  • De asemenea, aveți nevoie de două mașini pentru a face rsync.

Pentru tutorial, vom folosi Linux Mint 21.1 Vera. Puteți urma cu ușurință ghidul fără probleme folosind orice altă distribuție Linux.

De ce să folosiți rsync peste Scp?

Scp (copie securizată) este un protocol popular de linie de comandă care permite utilizatorilor să copieze fișiere. Urmează o abordare liniară a copierii. Aceasta înseamnă că pur și simplu copiază fișierele de la sursă la destinație. Pentru a face acest lucru în siguranță, folosește SSH.

Sintaxa comenzii scp este următoarea:

scp option SOURCE DESTINATION

Cu toate acestea, întrebarea rămâne, de ce să folosiți rsync peste scp?

Ei bine, există multiple beneficii ale utilizării rsync. Aceste beneficii includ:

  • Execuție mai rapidă: rsync este mai rapid decât scp, deoarece utilizează un protocol de actualizare la distanță. Acest lucru îi permite să transfere doar diferențele, mai degrabă decât întregul fișier. Deci, dacă ați configurat o sincronizare obișnuită în timp, trebuie să faceți o copie completă doar prima dată. De data viitoare, copiază doar părțile actualizate cu ajutorul algoritmului de transfer delta.
  • Consum mai mic de lățime de bandă: deoarece rsync nu trebuie să copieze din nou întregul fișier, duce la un consum mai mic de lățime de bandă. Mai mult, folosește și algoritmi de compresie/decompresie pentru a minimiza dimensiunea fișierului în timpul transferului.
  • Mai multe opțiuni de linie de comandă: rsync bate și scp în numărul de opțiuni de linie de comandă. Aceasta înseamnă că puteți ajusta rsync mai mult decât scp.
  Cele mai bune 9 instrumente de curățare a imaginilor pentru fotografii perfect lustruite

În concluzie, rsync este un instrument excelent de sincronizare incrementală. Instrumentul scp este de asemenea util pentru transferul/sincronizarea în siguranță a fișierelor. Într-un scenariu real, scp este potrivit pentru sarcinile de zi cu zi dacă căutați o abordare mai simplă. Cu toate acestea, pentru sarcini recurente, utilizați rsync.

Sintaxa comenzii rsync

Comanda rsync este următoarea:

Aici, termenii sunt definiți mai jos:

  • OPȚIUNE – Acestea sunt opțiunile rsync
  • SOURCE – Director sursă
  • DEST – Director de destinație
  • UTILIZATOR – Nume de utilizator la distanță
  • HOST – Nume de gazdă la distanță sau adresă IP

Opțiunile sunt parametri care oferă funcționalitate suplimentară comenzii. De exemplu, puteți sincroniza datele recursiv cu opțiunea -r. Cu toate acestea, opțiunea -r nu sincronizează proprietatea pentru grupuri și utilizatori, marcajele de timp, permisiunea sau linkurile simbolice. În schimb, puteți utiliza opțiunea -a, care rulează comanda în modul arhivare, asigurându-vă că toată proprietatea, permisiunea și legăturile simbolice ale fișierului sunt păstrate la copiere.

Alte opțiuni de sincronizare includ:

  • -z: comprimați datele pentru a economisi spațiu
  • -h: oferă o ieșire în format care poate fi citită de om
  • -b: efectuează backup în timpul procesului de sincronizare a datelor
  • -e: utilizați protocolul SSH pentru transferurile de date de la distanță
  • -progress: afișează progresul sincronizării datelor
  • -v: cereți rsync să afișeze o ieșire detaliată
  • –n: efectuați o funcționare uscată pentru a testa setările și configurarea pentru sincronizarea datelor
  • -q: suprima ieșirea și opțiunile comenzii rsync

Se instalează rsync

Majoritatea sistemelor Unix și Linux vin cu rsync instalat. Dacă sistemul dvs. nu are rsync, îl puteți instala folosind următoarele comenzi.

Pentru Debian/Ubuntu și Mint

sudo apt-get install rsync

Pentru Arch Linux

pacman -S rsync

Pe Gentoo

emerge sys-apps/rsync

Pe CentOS/Fedora/REHL

sudo yum install rsync

Pe openSUSE

sudo zypper install rsync

Deoarece avem Linux Mint, rsync a venit preinstalat. Deci, puteți rula comanda rsync în terminal pentru a vedea dacă este instalată. Își va explica capacitățile, opțiunile și alte informații vitale dacă sunt prezente.

nitt ~
$ rsync
rsync  version 3.2.3  protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
    batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
    symtimes, prealloc, stop-at, no crtimes
Optimizations:
    SIMD, no asm, openssl-crypto
Checksum list:
    xxh128 xxh3 xxh64 (xxhash) md5 md4 none
Compress list:
    zstd lz4 zlibx zlib none

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.

Să vedem acum rsync în acțiune cu diferite cazuri de utilizare.

Pentru tutorial, vom face două directoare.

  • sursă-director
  • dest-director

Pentru aceasta, trebuie să tastați următoarele comenzi.

mkdir source-directory
mkdir dest-directory

De asemenea, va trebui să generăm fișiere pentru ca rsync să funcționeze. Deci, să creăm câteva fișiere de test cu comanda de mai jos.

touch source-directory/file{1..100}

Acest lucru creează 100 de fișiere goale în directorul sursă. O puteți confirma introducând comanda de mai jos.

ls source-directory
Output:
nitt rsync-tutorial
$ ls
dest-directory  source-directory
nitt rsync-tutorial
$ touch source-directory/file{1..100}
nitt rsync-tutorial
$ ls source-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

Notă: Am păstrat directorul dest gol.

  7 programe de director pentru a vă configura propriul site web de listări de nișă

Copiați directoarele local în mod recursiv

Chiar dacă rsync urmărește în primul rând să copieze fișiere între un server local și cel de la distanță, este la fel de util pentru copierea fișierelor la nivel local.

În acest caz, vom folosi următoarea sintaxă rsync.

opțiunea rsync SOURCE DESTINATION

Copiați fișierele din directorul nostru sursă în directorul dest, rulând următoarea comandă.

rsync -r source-directory/ dest-directory

Aici, comanda „recursiv” copiază fișierele din directorul-sursă în directorul-dest.

nitt rsync-tutorial
$ ls
dest-directory  source-directory
nitt rsync-tutorial
$ ls dest-directory
nitt rsync-tutorial
$ ls source-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99
nitt rsync-tutorial
$ rsync -r source-directory/ dest-directory
nitt rsync-tutorial
$ ls dest-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

Aceasta copiază fiecare fișier din directorul-sursă în directorul-dest.

Copiați un singur fișier local

Acum că am învățat cum să sincronizăm două directoare, vom învăța cum să copiem un singur fișier.

În acest scop, vom edita fișierul gol file1 în directorul sursă și apoi îl vom sincroniza cu același fișier prezent în directorul dest.

Pentru a edita un fișier, tastați următoarea comandă.

nano source-directory/file1

Acum copiați și lipiți următorul text în editorul nano.

We're updating file1 in the source-directory.
Once we update, we'll push the new update to the dest-directory.
rsync doesn't need to re-copy the file using the delta-transfer algorithm.
This algorithm checks the differences and then updates destination files
accordingly.
So, once you save file1 in the source-directory, open file1 in
the dest-directory. It'll be empty.
However, if we check it after running rsync, you'll see that file1 in dest-directory
is updated.

Adăugarea de conținut la un fișier

Acum, închideți și salvați fișierul.

Să copiem acum fișierul folosind rsync.

sudo rsync -v --existing source-directory/file1 /dest-directory
#Output
nitt rsync-tutorial
$ sudo rsync -v --existing source-directory/file1 dest-directory
file1

sent 557 bytes  received 35 bytes  1,184.00 bytes/sec
total size is 474  speedup is 0.80

nitt rsync-tutorial
$ 

După cum probabil ați observat, am folosit opțiunea –existent. Aceasta actualizează fișierele existente. Dacă rulați comanda fără să existe –, aceasta nu se va actualiza, chiar dacă rulează cu succes.

Dacă singurul fișier pe care îl copiați nu există în folderul de destinație, trebuie să rulați următoarea comandă.

rsync -v source-directory/newfile dest-directory
#Output
nitt rsync-tutorial
$ rsync -v source-directory/newfile dest-directory
newfile

sent 82 bytes  received 35 bytes  234.00 bytes/sec
total size is 0  speedup is 0.00

Copierea mai multor fișiere

Dacă intenționați să copiați mai multe fișiere, trebuie să menționați căile sursă ale ambelor fișiere, urmate de directorul țintă.

În acest scop, vom crea două fișiere noi: fișierul nou2 și fișierul nou3, în directorul sursă. Rulați următoarea comandă pentru a face acest lucru.

touch source-directory/newfile{2..3}

Acum, utilizați următoarea comandă pentru a sincroniza mai multe fișiere.

rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
#Output
nitt rsync-tutorial
$ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
newfile2
newfile3

sent 135 bytes  received 54 bytes  378.00 bytes/sec
total size is 0  speedup is 0.00
nitt rsync-tutorial
$ 

Copiați fișierul sau directorul de la local la distanță

Sintaxa rsync pentru transferul local la distanță este ca mai jos.

rsync option SOURCE [email protected]:DEST

După cum puteți vedea, trebuie să cunoașteți adresa IP a mașinii de la distanță pentru a face acest lucru. De asemenea, trebuie să adăugați adresa IP după fișierul sursă.

rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Înainte de a începe transferul, acesta va cere parola. Introduceți-l pentru a continua. De asemenea, dacă utilizatorul este diferit în mașina de la distanță, atunci trebuie să îl menționați înainte de adresa IP urmată de @.

rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory

Dacă intenționați să copiați mai multe fișiere sau directoare, atunci trebuie să enumerați fișierele sau căile directoarelor. Sintaxa pentru aceasta este mai jos.

rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Protocoale specifice transferului de la distanță

rsync vă permite să specificați protocoale specifice de transfer de fișiere. Pentru a face acest lucru, trebuie să utilizați opțiunea -e, urmată de protocol.

  11 Software de management al proceselor de afaceri (BPM) pentru IMM-uri

De exemplu, dacă doriți să utilizați protocolul ssh, trebuie să adăugați -e ssh la comanda rsync.

rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Copierea unui fișier sau director de la distanță în local

Sintaxa rsync pentru transferul local la distanță este ca mai jos.

sync option [email protected]:SRC DEST

Aceasta acționează ca o cerere de tragere. Deci, pentru a obține fișierele/directorul necesar de la un server la distanță pe mașina dvs. locală, trebuie să rulați următoarea comandă.

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Comanda trage fișierele din directorul dest al mașinii la distanță în directorul sursă al mașinii locale.

În mod similar, puteți extrage un anumit fișier menționându-l prin calea completă.

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory

Pentru a copia mai multe fișiere sau directoare de la local la la distanță, trebuie să specificați calea între paranteze (separate prin virgule) după adresa IP a serverului.

rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory

În mod similar, puteți menționa și fișiere.

Afișați progresul live în timpul transferului

Este o idee bună să vedeți progresul în timp real pentru copiile de rezervă de date mai mari. Pentru aceasta, trebuie să utilizați indicatorul –progress. Adăugați-l la comanda rsync și puteți vedea viteza de transfer, timpul rămas și cantitatea de date transferate.

rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Ștergeți fișierele sursă după finalizarea transferului

Puteți folosi indicatorul -remove-source-files pentru a elimina fișierele sursă după transferul complet. Acest lucru vă poate ajuta în multe scenarii, mai ales când vine vorba de securizarea fișierelor fără a lăsa urme sau pur și simplu de a le folosi pentru a elibera spațiu.

rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

rsync funcționare uscată

De asemenea, Rysnc vă permite să evaluați înainte de a efectua o rulare reală. Funcția uscată vă permite să vedeți dacă faceți ceea ce trebuie. La urma urmei, nu doriți să actualizați fișierele din greșeală sau chiar să le ștergeți.

Trebuie să utilizați opțiunea –dry-run pentru a face o rulare uscată. Adăugați-l la comandă, urmat de sursă și destinație.

sudo rsync -v --dry-run source-directory/file1 dest-directory
nitt rsync-tutorial
$ sudo rsync -v --dry-run source-directory/file1 dest-directory
file1

sent 43 bytes  received 19 bytes  124.00 bytes/sec
total size is 474  speedup is 7.65 (DRY RUN)
nitt rsync-tutorial

Ieșirea este similară cu modul în care am rulat-o înainte. Cu toate acestea, veți observa o mențiune despre (DRY RUN) la sfârșitul ieșirii.

Setați dimensiunea minimă și maximă a fișierului

De asemenea, Rysnc vă permite să setați dimensiunea minimă sau maximă a fișierului în timpul transferului.

Deci, dacă doriți să transferați cu o dimensiune minimă de 15KB, trebuie să utilizați –min-size=15K.

rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Comanda va copia numai fișiere cu o dimensiune minimă de fișier de 15 KB. Dacă dimensiunea fișierului este mai mică, o va ignora.

În mod similar, puteți utiliza indicatorul –max-size pentru a seta dimensiunea maximă a fișierului.

rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Aici, rsync va ignora fișierele peste dimensiunea de 450K.

Setați limita lățimii de bandă

Dacă efectuați alte sarcini cu lățime de bandă intensivă, puteți seta rysnc pentru a seta limita de lățime de bandă pentru transfer. Pentru a face acest lucru, utilizați –bwlimit=KB/s.

rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Aici, setăm lățimea de bandă la 100Kb/s în timpul transferului.

Cuvinte finale

Acest lucru ne conduce la sfârșitul ghidului nostru de comandă rsync. Am învățat cum să folosim rysnc și am acoperit o mulțime de comenzi în mod eficient.

Cu toate acestea, rysnc oferă mult mai mult decât ceea ce am acoperit. De aceea, poate doriți să treceți și prin pagina de manual rsync, unde este acoperit fiecare aspect al rsync.

Apoi, consultați foile de cheat pentru linia de comandă pentru Windows, Linux și macOS.