„rsync“ yra uni­ver­sa­lus įrankis, kuris su­pa­pras­ti­na failų perdavimą per tinklo ryšį ir pa­grei­ti­na vietinių katalogų sin­ch­ro­ni­za­vi­mą. Dėl didelio lankstumo šis sin­ch­ro­ni­za­vi­mo įrankis yra puikus pa­si­rin­ki­mas įvairioms ope­ra­ci­joms su failais.

Kas yra rsync?

„rsync“ (trumpinys nuo „remote syn­ch­ro­ni­sa­tion“) – tai lanksti ir su tinklu su­de­ri­na­ma sin­ch­ro­ni­za­vi­mo priemonė, skirta „Linux“ aplinkai. Ši atvirojo kodo programa gali būti naudojama failams ir ka­ta­lo­gams sin­ch­ro­ni­zuo­ti tarp vietinių sistemų arba per tinklą. Priemonė naudoja di­fe­ren­ci­nį duomenų perdavimo metodą, kai per­duo­da­mos tik tos duomenų dalys, kurios iš tikrųjų buvo pakeistos. Tai sumažina keičiamų duomenų kiekį ir žymiai pa­grei­ti­na sin­ch­ro­ni­za­vi­mo procesą. Dėl įvairių parinkčių „rsync“ leidžia tiksliai valdyti sin­ch­ro­ni­za­vi­mo veikimą. Lanksti sintaksė leidžia atlikti tiek paprastas vietines kopijas, tiek su­dė­tin­gas tinklo sin­ch­ro­ni­za­ci­jas.

Kokia yra „rsync“ sintaksė?

Komandos „rsync“ sintaksė yra paprasta ir panaši į SSH, SCP bei CP sintaksę. Pag­rin­di­nė struktūra yra tokia:

rsync [OPTION] source destination
bash

Šaltinio kelias, iš kurio turi būti sin­ch­ro­ni­zuo­ja­mi duomenys, įvedamas source po­zi­ci­jo­je, o pa­skir­ties kelias nurodomas destination po­zi­ci­jo­je. „rsync“ siūlo įvairias parinktis, kurias nau­do­to­jai gali pa­si­telk­ti, kad sin­ch­ro­ni­za­vi­mo procesą pri­tai­ky­tų savo po­rei­kiams. Daž­niau­siai nau­do­ja­mos parinktys yra:

  • -a (archyvai): Išsaugo re­kur­sy­vias failų teises, laiko žymes, grupes, sa­vi­nin­kus ir spe­cia­lias failų savybes
  • -v (išsamus): Rodo išsamią in­for­ma­ci­ją apie sin­ch­ro­ni­za­vi­mo procesą
  • -r (recursive): sin­ch­ro­ni­zuo­ja katalogus ir jų turinį re­kur­sy­viai
  • -u (at­nau­ji­ni­mas): Perkelia tik tuos failus, kurie yra naujesni už tuos, kurie jau yra tiks­li­nė­je kataloge
  • -z (compress): Sumažina duomenų srautą tinkle
  • -n –itemize-changes: rodo sąrašą pakeitimų, kurie bus atlikti
  • --delete: Ištrina pa­skir­ties kataloge esančius failus, kurių šaltinyje jau nebėra
  • --exclude: Iš sin­ch­ro­ni­za­ci­jos pašalina tam tikrus failus ar katalogus
  • --dry-run: Imituoja sin­ch­ro­ni­za­vi­mo procesą, faktiškai ne­per­duo­dant failų
  • --progress: Rodo failų perkėlimo eigą
  • --partial: Jei per­kė­li­mas nu­trau­kia­mas, iš dalies perkelti failai lieka tiks­li­nė­je kataloge. At­nau­ji­nus perkėlimą, failo per­kė­li­mas tęsiamas nuo pas­ku­ti­nės būsenos

„rsync“ sintaksės pa­vyz­džiai

Šie „rsync“ sintaksės pa­vyz­džiai turėtų padėti geriau suprasti, kaip naudojama ši komanda. Šiame kodo pavyzdyje sukuriama katalogas dir1, kuriame yra 100 tuščių bandomųjų failų, ir antrasis tuščias katalogas dir2“:

$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
bash

dir1 turinį galima sin­ch­ro­ni­zuo­ti toje pačioje sistemoje su dir2, naudojant -r parinktį:

$ rsync -r dir1/ dir2
bash

Arba galima pa­si­nau­do­ti -a pa­rink­ti­mi, kuri sin­ch­ro­ni­zuo­ja re­kur­sy­viai ir apima sim­bo­li­nes nuorodas, spe­cia­lių­jų įrenginių failus, pakeitimo laiką, grupes, sa­vi­nin­kus ir leidimus:

$ rsync -a dir1/ dir2
bash

Pastaba: Kablelis (/) rsync komandos šaltinio katalogo pabaigoje yra svarbus, nes jis nurodo , kad turi būti sin­ch­ro­ni­zuo­tas katalogo turinys, o ne pats katalogas.

$ rsync -a dir1/ dir2
bash

Štai pavyzdys, kaip atrodys re­zul­ta­tas:

sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
bash

Jei šaltinio katalogo pa­va­di­ni­me nėra galinio kablelio, šaltinio katalogas bus nu­ko­pi­juo­tas į pa­skir­ties katalogą:

$ rsync -a dir1 dir2
bash

Štai re­zul­ta­tas:

sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .
bash

Naudojant kablelį šaltinio katalogo pabaigoje už­tik­ri­na­ma, kad sin­ch­ro­ni­za­vi­mo procesas vyktų kaip numatyta ir kad šaltinio katalogo turinys būtų perkeltas į tinkamą pa­skir­ties katalogą.

Kaip sin­ch­ro­ni­zuo­ti „rsync“ su nuotoline sistema

Nuo­to­li­nės sistemos sin­ch­ro­ni­za­vi­mas naudojant „rsync“ paprastai nėra su­dė­tin­gas, jei turite SSH prieigą prie nuo­to­li­nio kom­piu­te­rio ir reikiamą au­ten­ti­fi­ka­vi­mo in­for­ma­ci­ją. „Rsync“ dažnai naudoja SSH (Secure Shell) saugiam ryšiui su nuo­to­li­nė­mis sis­te­mo­mis už­tik­rin­ti. Norint naudoti šią priemonę, ji turi būti įdiegta abiejose pusėse.

Jei pa­tvir­tin­ta, kad tarp dviejų kom­piu­te­rių veikia SSH ryšys, aplanką dir1 galima sin­ch­ro­ni­zuo­ti nuo­to­li­nio kom­piu­te­rio. Šiuo atveju reikia perkelti patį katalogą, todėl toliau pa­teik­to­je komandoje pabaigos brūkšnys buvo pra­leis­tas:

$ rsync -a ~/dir1 username@remote_host:destination_directory
bash

Jei katalogas perkeltas iš vietinės sistemos į nuotolinę sistemą, tai vadinama „push“ operacija. Tuo tarpu, kai nuo­to­li­nis katalogas sin­ch­ro­ni­zuo­ja­mas su vietine sistema, tai vadinama „pull“ operacija. Sintaksė yra tokia:

$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash

Kokios dar galimybės yra „rsync“?

„rsync“ stan­dar­ti­nį veikimą galima toliau pri­tai­ky­ti naudojant toliau nurodytas parinktis.

Ne­su­spaus­tų failų per­kė­li­mas naudojant „rsync“

Tinklo apkrovą per­ke­liant ne­su­spaus­tus failus galima sumažinti naudojant -z parinktį:

$ rsync -az source destination
bash

Eigos rodymas ir nutrauktų perdavimų tęsimas

Pa­si­rin­kus -P, galite sujungti --progress ir --partial parinktis. Tai suteikia galimybę stebėti perdavimo eigą ir tuo pačiu metu at­nau­jin­ti nu­trauk­tus per­da­vi­mus:

$ rsync -azP source destination
bash

Štai re­zul­ta­tas:

sending 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)
. . .
bash

Vykdykite komandą dar kartą, kad gautumėte trumpesnį išvesties tekstą. Tai leidžia „rsync“ nustatyti, ar buvo padaryti pa­kei­ti­mai, remiantis pakeitimų laiku.

$ rsync -azP source destination
bash

Štai re­zul­ta­tas:

sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
bash

Sin­ch­ro­ni­zuo­ki­te katalogus naudodami „rsync“

Norint už­tik­rin­ti, kad du katalogai būtų iš tikrųjų sin­ch­ro­ni­zuo­ti, būtina iš tikslinio katalogo pašalinti failus, kurie buvo ištrinti iš šaltinio katalogo. Tačiau „rsync“ au­to­ma­tiš­kai ne­pa­ša­li­na failų iš tikslinio katalogo. Tai galima pakeisti naudojant --delete parinktį. Vis dėlto šią parinktį reikia naudoti atsargiai, nes ji pašalina failus iš tikslinio katalogo, kurių šaltinio kataloge jau nebėra.

Prieš naudodami šią parinktį, tu­rė­tu­mė­te pa­si­nau­do­ti --dry-run pa­rink­ti­mi. Tai leis jums atlikti sin­ch­ro­ni­za­vi­mo proceso imitavimą ne­iš­tri­nant jokių tikrų failų. Tokiu būdu galėsite už­tik­rin­ti, kad bus atlikti tik norimi pa­kei­ti­mai ir netyčia ne­pra­ras­tu­mė­te svarbių duomenų:

$ rsync -a --delete source destination
bash

Išskirti failus ir katalogus iš sin­ch­ro­ni­za­vi­mo

Naudojant „rsync“, galite pa­si­nau­do­ti --exclude pa­rink­ti­mi, kad tam tikri failai ir katalogai nebūtų sin­ch­ro­ni­zuo­ja­mi. Tai praverčia, jei, pa­vyz­džiui, nenorite sin­ch­ro­ni­zuo­ti laikinių failų, žurnalo failų ar kito turinio.

$ rsync -a --exclude=pattern_to_exclude source destination
bash

Jei nurodėte failų išskyrimo šabloną, galite pa­si­nau­do­ti --include= pa­rink­ti­mi, kad pa­keis­tu­mė­te šį išskyrimą tam tikriems failams, kurie atitinka kitą šabloną.

$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
bash

At­sar­gi­nes kopijas iš­sau­go­ki­te naudodami „rsync“

--backup parinktis leidžia išsaugoti svarbių failų at­sar­gi­nes kopijas. Ji gali būti naudojama kartu su --backup-dir pa­rink­ti­mi, kad būtų nurodytas katalogas, kuriame turi būti išsaugoti at­sar­gi­nių kopijų failai:

$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
bash

Išsamią įvairių at­sar­gi­nių kopijų kūrimo scenarijų apžvalgą rasite mūsų straips­ny­je apie serverių at­sar­gi­nių kopijų kūrimą naudojant „rsync“.

Go to Main Menu