16 praktinių „Rsync“ komandos pavyzdžių sistemoje „Linux“.


Rsync (Nuotolinis sinchronizavimas) yra dažniausiai naudojama komanda, skirta failams ir katalogams nukopijuoti ir sinchronizuoti nuotoliniu būdu bei lokaliai „Linux“/„Unix“ sistemose.

Naudodami komandą rsync galite nukopijuoti ir sinchronizuoti duomenis nuotoliniu būdu ir vietoje kataloguose, diskuose ir tinkluose, kurti atsargines duomenų kopijas ir dubliuoti du „Linux“ įrenginius.

Šiame straipsnyje paaiškinama 16 pagrindinių ir išplėstinių komandos rsync naudojimo būdų, kaip nuotoliniu būdu ir vietiniu būdu perkelti failus į Linux pagrįstus įrenginius. Nereikia būti root naudotoju, kad paleistumėte komandą rsync.

„Rsync Command“ pranašumai

Jis siūlo keletą privalumų, įskaitant:

  • Efektyvus failų perkėlimas – rsync naudoja delta perdavimo algoritmą, o tai reiškia, kad perkelia tik skirtumus tarp šaltinio ir paskirties failų, o tai žymiai sumažina perduodamų duomenų kiekį, todėl yra efektyvu sinchronizuoti didelius failus ar katalogus.
  • Nuotolinis failų sinchronizavimas – rsync palaiko tiek vietinį, tiek nuotolinį failų perkėlimą per SSH, kuris leidžia sinchronizuoti vietines ir nuotolines sistemas arba atspindėti katalogus keliuose įrenginiuose.
  • Papildomos atsarginės kopijos – rsync puikiai tinka laipsniškoms atsarginėms kopijoms kurti, nes ji efektyviai kuria ir atnaujina atsargines kopijas perkeldama tik naujus arba pakeistus failus.
  • Išsaugo failo leidimus – rsync gali išsaugoti įvairius failo atributus, tokius kaip leidimai, nuosavybės teisė, laiko žymos ir simbolinės nuorodos, o tai užtikrina, kad nukopijuoti failai paskirties vietoje išlaikys pradines savybes.
  • Pralaidumo valdymas – rsync leidžia apriboti pralaidumo naudojimą failų perkėlimo metu, nes siųsdamas ir gaudamas duomenis iš abiejų galų naudoja glaudinimo ir išskleidimo metodus.
  • Greičiau – rsync gali būti greitesnis nei scp (saugi kopijavimas) failams perkelti, ypač kai sinchronizuojami dideli katalogai arba kai dirbama su failais, kurie jau iš dalies perkelti arba yra paskirties vietoje.

Rsync komandos sintaksė

Komanda rsync atitinka šią sintaksę:

rsync [OPTIONS] SOURCE DESTINATION

Toliau pateikiamas skirtingų komponentų ir parinkčių, naudojamų su rsync komandomis, paaiškinimas:

  • -v – išsami išvestis, rodanti išsamią informaciją apie perdavimą.
  • -r – rekursyviai kopijuoja duomenis (tačiau neišsaugo laiko žymų ir leidimo perduodant duomenis.
  • -a – archyvavimo režimas, leidžiantis kopijuoti failus rekursyviai, taip pat išsaugomos simbolinės nuorodos, failų leidimai, naudotojų ir grupių nuosavybės teisės bei laiko žymos.
  • -z – suglaudinkite failus perkėlimo metu, kad sumažintumėte tinklo naudojimą.
  • -h – žmogaus skaitomi, išvesti skaičiai žmogui suprantamu formatu.
  • -P – rodyti pažangą perdavimo metu.
  • ŠALTINIS – nurodomas (-i) šaltinio failas (-ai) arba katalogas, kurį reikia perkelti, kuris gali būti vietinė arba nuotolinė vieta.
  • DESTINATION – nurodo paskirties kelią, į kurį bus nukopijuoti failai arba katalogai. Panašiai kaip šaltinis, tai gali būti vietinis kelias arba nutolusi vieta.

Įdiekite Rsync Linux sistemoje

Mes galime įdiegti rsync paketą naudodami toliau pateiktą paketų tvarkyklę pagal jūsų Linux platinimą.

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. Nukopijuokite/sinchronizuokite failą vietoje

Norėdami kopijuoti arba sinchronizuoti failą vietoje, galite naudoti šią komandą, kuri sinchronizuos vieną failą vietiniame kompiuteryje iš vienos vietos į kitą.

Šiame pavyzdyje failo pavadinimą backup.tar reikia nukopijuoti arba sinchronizuoti su /tmp/backups/ aplanku.

[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

Aukščiau pateiktame pavyzdyje galite matyti, kad jei paskirties vieta dar nėra, rsync automatiškai sukurs paskirties vietos katalogą.

2. Vietinis katalogo kopijavimas/sinchronizavimas

Ši komanda perkels arba sinchronizuos visus failus iš vieno katalogo į kitą to paties įrenginio katalogą.

Šiame pavyzdyje /root/rpmpkgs yra keletas rpm paketų failų ir norite, kad tas katalogas būtų nukopijuotas į /tmp/backups/ aplanką.

[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. Nukopijuokite katalogą iš vietinio į nuotolinį serverį

Norėdami nukopijuoti katalogą iš vietinio serverio į nuotolinį serverį, galite naudoti šią komandą, kuri sinchronizuos katalogą iš vietinio į nuotolinį kompiuterį.

Pavyzdžiui, jei jūsų vietiniame kompiuteryje yra aplankas „rpmpkgs“, kuriame yra keli RPM paketai ir jei norite, kad to vietinio katalogo turinys būtų išsiųstas į nuotolinį serverį, galite naudoti šią komandą.

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. Nukopijuokite katalogą iš nuotolinio į vietinį serverį

Ši komanda padės sinchronizuoti nuotolinį katalogą su vietiniu katalogu. Šiame pavyzdyje katalogas /root/rpmpkgs, esantis nuotoliniame serveryje, kopijuojamas į vietinį kompiuterį, esantį /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 per SSH

Naudodami rsync galime naudoti SSH (Secure Shell) duomenims perduoti, naudodami SSH protokolą, kai perduodame duomenis, galite būti užtikrinti, kad jūsų duomenys perduodami saugiu ryšiu. su šifravimu, kad niekas negalėtų perskaityti jūsų duomenų, kol jie perduodami laidu internete.

Be to, kai naudojame rsync, turime pateikti naudotojo/root slaptažodį, kad atliktume tą konkrečią užduotį, todėl naudokite SSH, jūsų prisijungimai bus išsiųsti šifruotu būdu, kad jūsų slaptažodis būtų saugus.

Jei norite naudoti rsync per SSH, galite naudoti parinktį -e, kad nurodytumėte nuotolinio apvalkalo komandą, kuri paprastai yra ssh, kaip parodyta.

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

6. Nukopijuokite failą iš nuotolinio serverio į vietinį serverį su SSH

Norėdami sinchronizuoti failą iš nuotolinio serverio su vietiniu serveriu, galite nurodyti protokolą su rsync, naudodami parinktį -e su norimu naudoti protokolo pavadinimu.

Šiame pavyzdyje mes naudosime „ssh“ su parinktimi „-e“ ir vykdysime duomenų perdavimą.

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. Nukopijuokite failą iš vietinio serverio į nuotolinį serverį su SSH

Norėdami sinchronizuoti failą iš vietinio serverio su nuotoliniu serveriu naudodami SSH, galite naudoti šią komandą, kaip parodyta.

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. Rodyti pažangą perkeliant duomenis naudojant Rsync

Norėdami parodyti pažangą perkeliant duomenis iš vieno įrenginio į kitą, galime naudoti parinktį --progress', kuri rodo failus ir laiką, likusį perkėlimui užbaigti.

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. Įtraukite failus su tam tikru plėtiniu su Rsync

Norėdami įtraukti konkrečius failus ar šablonus rsync operacijos metu, galite naudoti parinktį --include su plėtiniu, kuris atitinka visus failus.

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

Pateiktame pavyzdyje rsync perkėlimo metu įtrauks tik failus su plėtiniu .txt iš katalogo /path/to/source/.

10. Išskirkite failus su konkrečiu plėtiniu naudodami Rsync

Panašiai, norėdami išskirti konkretų plėtinį rsync operacijos metu, galite naudoti parinktį --exclude su pakaitos simboliu.

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

Pateiktame pavyzdyje rsync perkėlimo metu neįtrauks failų su nurodytu plėtiniu (*.ext), kartu įtraukdama visus kitus failus ir katalogus.

11. Įtraukti ir išskirti failus su Rsync

Norėdami įtraukti ir išskirti konkrečius failus ar šablonus rsync operacijos metu, galite naudoti ir parinktis --include ir --exclude su atitinkamais pakaitos simboliais.

Šios dvi parinktys leidžia mums įtraukti ir išskirti failus, nurodant parametrus. Ši parinktis padeda mums nurodyti tuos failus ar katalogus, kuriuos norite įtraukti į sinchronizavimą, ir išskirti failus bei aplankus. su kuriuo nenorite būti perkeltas.

Šiame pavyzdyje komanda rsync apims tik tuos failus ir katalogus, kurie prasideda raide R ir neįtrauks visų kitų failų ir katalogų.

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

12. Parinkties –delete naudojimas su Rsync

Jei failo ar katalogo šaltinyje nėra, bet paskirties vietoje jis jau yra, sinchronizuodami galbūt norėsite ištrinti esamą failą/katalogą.

Galime naudoti parinktį '--delete' norėdami ištrinti failus, kurių nėra šaltinio kataloge.

Šaltinis ir tikslas yra sinchronizuoti. Dabar sukurkite naują failą test.txt paskirties vietoje.

[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 turi naują failą pavadinimu test.txt, kai sinchronizuojama su šaltiniu naudojant parinktį –delete, pašalinamas failas test.txt .

13. Nustatykite failų perdavimo limitą naudodami Rsync

Galite nurodyti Maksimalų failo dydį, kurį norite perkelti arba sinchronizuoti. Tai galite padaryti naudodami parinktį „--max-size“. Šiame pavyzdyje maksimalus failo dydis yra 200 000, todėl ši komanda perduos tik tuos failus, kurie yra lygūs arba mažesni nei 200 000.

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. Automatiškai ištrinkite šaltinio failus po perdavimo

Tarkime, kad turite pagrindinį žiniatinklio serverį ir duomenų atsarginės kopijos serverį, sukūrėte kasdienę atsarginę kopiją ir sinchronizavote ją su atsarginės kopijos serveriu, bet dabar nenorite saugoti tos vietinės atsarginės kopijos savo žiniatinklio serveryje.

Taigi, ar palauksite, kol bus baigtas perkėlimas, ir tada rankiniu būdu ištrinsite tą vietinį atsarginės kopijos failą? Zinoma kad ne. Šį automatinį ištrynimą galima atlikti naudojant parinktį „--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. Atlikite Dry Run su Rsync

Jei esate naujokas naudojant rsync ir nežinote, ką tiksliai atliks jūsų komanda. „Rsync“ tikrai gali sujaukti dalykus paskirties aplanke, o anuliuoti gali būti varginantis darbas.

Naudodami šią parinktį failai neatliks jokių pakeitimų ir parodys komandos išvestį. Jei išvestis rodo lygiai tą patį, kaip norite, galite pašalinti '--dry-run ' parinktį iš savo komandos ir paleiskite terminale.

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 Set Bandwidth Limit ir Transfer File

Perkeldami duomenis iš vieno įrenginio į kitą, galite nustatyti pralaidumo apribojimą naudodami parinktį --bwlimit. Ši parinktis padeda apriboti I/O pralaidumą.

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

Be to, pagal numatytuosius nustatymus rsync sinchronizuoja tik pakeistus blokus ir baitus. Jei aiškiai norite sinchronizuoti visą failą, su juo naudokite parinktį -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
Išvada

Tai užbaigia mūsų rsync ir jo galimybių apžvalgą. Norėdami toliau tyrinėti plačias jo parinktis ir funkcijas, raginu žiūrėti turimus išsamius vadovo puslapius (man puslapius).