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.
Cuprins
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 folosește 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, de asemenea, scp în numărul de opțiuni de linie de comandă. Aceasta înseamnă că puteți ajusta rsync mai mult decât scp.
Î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.
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.
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.