rsync je vse­stran­sko orodje, ki po­e­no­sta­vlja prenos datotek prek omrežnih povezav in pospeši sin­hro­ni­za­ci­jo lokalnih map. Zaradi visoke pri­la­go­dlji­vo­sti je to sin­hro­ni­za­cij­sko orodje odlična izbira za naj­ra­zlič­nej­še operacije na ravni datotek.

Kaj je rsync?

rsync, kratica za »remote syn­chro­ni­sa­ti­on« (daljinska sin­hro­ni­za­ci­ja), je pri­la­go­dlji­vo in omrežno zdru­žlji­vo orodje za sin­hro­ni­za­ci­jo v sistemu Linux. Ta od­pr­to­ko­dni program se lahko uporablja za sin­hro­ni­za­ci­jo datotek in map med lokalnimi sistemi ali prek omrežij. Orodje uporablja tehniko di­fe­ren­ci­al­ne­ga prenosa podatkov, pri kateri se prenesejo le tisti deli podatkov, ki so se dejansko spre­me­ni­li. To zmanjša količino iz­me­nja­nih podatkov in znatno pospeši proces sin­hro­ni­za­ci­je. Za­hva­lju­joč številnim možnostim rsync omogoča natančno nad­zo­ro­va­nje sin­hro­ni­za­cij­ske­ga delovanja. Pri­la­go­dlji­va sintaksa omogoča tako preprosto lokalno kopiranje kot tudi kom­ple­ksne omrežne sin­hro­ni­za­ci­je.

Kakšna je sintaksa za rsync?

Sintaksa ukazov programa rsync ima preprosto strukturo in je podobna sintaksi ukazov SSH, SCP in CP. Osnovna struktura je naslednja:

rsync [OPTION] source destination
bash

Pot vira, iz katerega naj se podatki sin­hro­ni­zi­ra­jo, se vnese v source, ciljna pot pa se določi v destination. Program rsync ponuja vrsto možnosti, s katerimi lahko upo­rab­ni­ki pri­la­go­di­jo postopek sin­hro­ni­za­ci­je svojim potrebam. Naj­po­go­ste­je upo­ra­blja­ne možnosti so:

  • -a (arhivi): ohrani re­kur­ziv­ne pravice do datotek, časovne oznake, skupine, lastnike in posebne lastnosti datotek
  • -v (podrobno): Prikaže podrobne in­for­ma­ci­je o procesu sin­hro­ni­za­ci­je
  • -r (recursive): Sin­hro­ni­zi­ra imenike in njihovo vsebino re­kur­ziv­no
  • -u (po­so­do­bi­tev): prenese samo datoteke, ki so novejše od tistih, ki so že v ciljnem imeniku
  • -z (compress): Zmanjša promet podatkov prek omrežja
  • -n –itemize-changes: Prikaže seznam sprememb, ki bodo izvedene
  • --delete: Iz ciljnega imenika izbriše datoteke, ki v izvorni mapi ne obstajajo več
  • --exclude: Izključi določene datoteke ali imenike iz sin­hro­ni­za­ci­je
  • --dry-run: Simulira proces sin­hro­ni­za­ci­je, ne da bi dejansko prenesel datoteke
  • --progress: Prikaže napredek prenosa datotek
  • --partial: Datoteke, ki so bile delno prenesene, ostanejo v ciljnem imeniku, če se prenos prekine. Ko se prenos nadaljuje, se datoteka nadaljuje od zadnjega stanja

Primeri sintakse rsync

Naslednji primeri sintakse ukaza rsync naj bi olajšali ra­zu­me­va­nje njegove uporabe. V na­sle­dnjem primeru kode se ustvari imenik dir1, ki vsebuje 100 praznih testnih datotek, ter drugi prazen imenik dir2:

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

Vsebino dir1 je mogoče na istem sistemu sin­hro­ni­zi­ra­ti s dir2 z uporabo možnosti -r:

$ rsync -r dir1/ dir2
bash

Druga možnost je uporaba opcije -a, ki sin­hro­ni­zi­ra re­kur­ziv­no in vključuje sim­bo­lič­ne povezave, datoteke posebnih naprav, čase sprememb, skupine, lastnike in po­o­bla­sti­la:

$ rsync -a dir1/ dir2
bash

Opomba: Poševnica (/) na koncu imena izvorne mape v ukazu rsync je pomembna, saj pomeni , da je treba sin­hro­ni­zi­ra­ti vsebino mape, ne pa same mape.

$ rsync -a dir1/ dir2
bash

Tukaj je primer izpisa:

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

Če imenik vira nima končnega poševnika, se bo imenik vira kopiral v ciljni imenik:

$ rsync -a dir1 dir2
bash

Tukaj je izpis:

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

Uporaba poševnice na koncu imena izvorne mape za­go­ta­vlja, da sin­hro­ni­za­ci­ja poteka po načrtu in da se vsebina izvorne mape prenese v pravo ciljno mapo.

Kako sin­hro­ni­zi­ra­ti rsync z od­da­lje­nim sistemom

Sin­hro­ni­za­ci­ja od­da­lje­ne­ga sistema z rsync-om običajno ni težka, če imate SSH-dostop do od­da­lje­ne­ga ra­ču­nal­ni­ka in potrebne podatke za av­ten­ti­fi­ka­ci­jo. Rsync pogosto uporablja SSH (Secure Shell) za varno ko­mu­ni­ka­ci­jo z od­da­lje­ni­mi sistemi. Da bi lahko upo­ra­blja­li to orodje, mora biti nameščeno na obeh straneh.

Če je dostop prek SSH med obema ra­ču­nal­ni­ko­ma potrjen, je mogoče mapo dir1 sin­hro­ni­zi­ra­ti na od­da­lje­nem ra­ču­nal­ni­ku. V tem primeru je treba prenesti dejansko mapo, zato je v na­sle­dnjem ukazu izpuščena končna poševnica:

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

Če se imenik prenese z lokalnega sistema na oddaljeni sistem, to imenujemo operacija »push«. Nasprotno pa, če se oddaljeni imenik sin­hro­ni­zi­ra z lokalnim sistemom, to imenujemo operacija »pull«. Sintaksa za to je naslednja:

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

Katere druge možnosti ponuja rsync?

Stan­dar­dno delovanje programa rsync je mogoče dodatno pri­la­go­di­ti s pomočjo spodaj navedenih možnosti.

Prenos ne­sti­snje­nih datotek z rsync

Obre­me­ni­tev omrežja pri prenosu ne­sti­snje­nih datotek je mogoče zmanjšati z uporabo možnosti -z:

$ rsync -az source destination
bash

Prikaz napredka in na­da­lje­va­nje pre­ki­nje­nih prenosov

Z -P lahko združite možnosti --progress in --partial. S tem dobite pregled nad potekom prenosov in hkrati lahko na­da­lju­je­te pre­ki­nje­ne prenose:

$ rsync -azP source destination
bash

Tukaj je izpis:

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

Ponovno izvedite ukaz, da dobite krajši izpis. Tako lahko rsync na podlagi časa sprememb ugotovi, ali so bile izvedene spremembe.

$ rsync -azP source destination
bash

Tukaj je izpis:

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

Sin­hro­ni­zi­raj­te imenike z rsync

Da bi za­go­to­vi­li dejansko sin­hro­ni­za­ci­jo obeh map, je treba v ciljni mapi izbrisati datoteke, ki so bile od­stra­nje­ne iz izvorne mape. Vendar pa rsync datotek iz ciljne mape ne odstrani samodejno. To je mogoče spre­me­ni­ti z uporabo opcije --delete. Vendar je pomembno, da to opcijo upo­ra­blja­te previdno, saj izbriše datoteke v ciljni mapi, ki v izvorni mapi ne obstajajo več.

Preden uporabite to možnost, najprej uporabite možnost --dry-run. To vam bo omogočilo, da izvedete si­mu­la­ci­jo sin­hro­ni­za­cij­ske­ga postopka, ne da bi pri tem izbrisali kakršne koli dejanske datoteke. Na ta način lahko za­go­to­vi­te, da se izvedejo le želene spremembe, ne da bi po nesreči izgubili pomembne podatke:

$ rsync -a --delete source destination
bash

Izključi datoteke in mape iz sin­hro­ni­za­ci­je

V programu rsync lahko z uporabo opcije --exclude iz­klju­či­te določene datoteke in mape iz sin­hro­ni­za­ci­je. To je koristno, če na primer ne želite sin­hro­ni­zi­ra­ti začasnih datotek, dnev­ni­ških datotek ali druge vsebine.

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

Če ste določili vzorec za iz­klju­či­tev datotek, lahko z uporabo opcije --include= to iz­klju­či­tev prepisate za določene datoteke, ki ustrezajo drugemu vzorcu.

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

Shra­nje­va­nje var­no­stnih kopij z rsync

Možnost --backup omogoča shra­nje­va­nje var­no­stnih kopij pomembnih datotek. Uporabite jo lahko skupaj z možnostjo --backup-dir, da določite imenik, v katerega naj se shranijo varnostne kopije:

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

Podroben pregled različnih sce­na­ri­jev var­no­stne­ga kopiranja najdete v našem članku o var­no­stnem kopiranju stre­žni­kov z rsync.

Go to Main Menu