Az rsync egy sokoldalú eszköz, amely egyszerűsíti a fájlok hálózati kapcsolatokon történő átvitelét és felgyorsítja a helyi könyvtárak szinkronizálását. A nagyfokú rugalmasságnak köszönhetően ez a szinkronizáló eszköz kiváló választás számos fájlszintű művelethez.

Mi az az rsync?

Az rsync, a „remote synchronisation” (távoli szinkronizálás) rövidítése, egy rugalmas és hálózati kompatibilis szinkronizáló eszköz Linux alatt. Az open source programmal fájlok és könyvtárak szinkronizálhatók helyi rendszerek között vagy hálózatokon keresztül. Az eszköz differenciális adatátviteli technikát használ, amelynek során csak azok az adatok kerülnek átvitelre, amelyek ténylegesen megváltoztak. Ez minimálisra csökkenti az adatcsere mennyiségét és jelentősen felgyorsítja a szinkronizálási folyamatot. A rsync számos beállítási lehetőségnek köszönhetően lehetővé teszi a szinkronizálás pontos vezérlését. A rugalmas szintaxis egyszerű helyi másolatok és komplex hálózati szinkronizálások készítését is lehetővé teszi.

Mi az rsync szintaxisa?

Az rsync parancs szintaxisa egyszerű felépítésű és hasonló az SSH, SCP és CP parancsokéhoz. Az alapvető felépítés a következő:

rsync [OPTION] source destination
bash

Az adatok szinkronizálásának forrásútvonalát sourceben kell megadni, míg a célútvonalat destinationben. Az rsync számos opciót kínál, amelyekkel a felhasználók a szinkronizálási folyamatot igényeikhez igazíthatják. A leggyakrabban használt opciók a következők:

  • -a (archívumok): Megőrzi a rekurzív fájlengedélyeket, időbélyegeket, csoportokat, tulajdonosokat és speciális fájl tulajdonságokat
  • -v (verbose): Részletes információkat jelenít meg a szinkronizálási folyamatról
  • -r (recursive): Rekurzív módon szinkronizálja a könyvtárakat és azok tartalmát
  • -u (update): Csak azokat a fájlokat továbbítja, amelyek újabbak, mint a célkönyvtárban már meglévők
  • -z (compress): Csökkenti a hálózati adatforgalmat
  • -n –itemize-changes: Megjeleníti a végrehajtandó változtatások listáját
  • --delete: Törli a célkönyvtárban azokat a fájlokat, amelyek már nem léteznek a forrásban
  • --exclude: Bizonyos fájlokat vagy könyvtárakat kizár a szinkronizálásból
  • --dry-run: Szimulálja a szinkronizálási folyamatot anélkül, hogy ténylegesen átmásolná a fájlokat
  • --progress: Megjeleníti a fájlátvitel előrehaladását
  • --partial: A részben átvitt fájlok a célkönyvtárban maradnak, ha az átvitel megszakad. Az átvitel folytatásakor a fájl az utolsó állapotából folytatódik

Példák az rsync szintaxisra

Az alábbi rsync szintaxis példák segítenek megérteni a parancs használatát. Az alábbi kódpélda létrehozza a dir1 könyvtárat, amely 100 üres tesztfájlt és egy második üres dir2 könyvtárat tartalmaz:

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

A dir1 tartalma a -r opcióval szinkronizálható ugyanazon a rendszeren a dir2 -tel:

$ rsync -r dir1/ dir2
bash

Alternatív megoldásként használható a -a opció, amely rekurzívan szinkronizál, és tartalmazza a szimbolikus linkeket, speciális eszközfájlokat, módosítási időket, csoportokat, tulajdonosokat és jogosultságokat:

$ rsync -a dir1/ dir2
bash

Megjegyzés: Az rsync parancsban a forráskönyvtár végén található perjel (/) fontos, mert jelzi , hogy a könyvtár tartalmát kell szinkronizálni, nem magát a könyvtárat.

$ rsync -a dir1/ dir2
bash

Íme egy példa a kimenetre:

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

Ha a forráskönyvtár nem tartalmaz záró perjelet, akkor a forráskönyvtár a célkönyvtárba lesz másolva:

$ rsync -a dir1 dir2
bash

Itt van az eredmény:

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

A forráskönyvtár végén lévő perjel használata biztosítja, hogy a szinkronizálási folyamat a várt módon futjon, és hogy a forráskönyvtár tartalma a megfelelő célkönyvtárba kerüljön.

Hogyan szinkronizáljuk az rsync-et egy távoli rendszerrel?

A távoli rendszer szinkronizálása az rsync segítségével általában nem nehéz, feltéve, hogy rendelkezik SSH-hozzáféréssel a távoli számítógéphez és a szükséges hitelesítési adatokkal. Az rsync gyakran használja az SSH-t (Secure Shell) a távoli rendszerekkel való biztonságos kommunikációhoz. Az eszköz használatához mindkét oldalon telepíteni kell.

Ha az SSH-hozzáférés a két számítógép között ellenőrzésre került, a dir1 mappa szinkronizálható egy távoli számítógépen. Ebben az esetben a tényleges könyvtárat kell átvinni, ezért a következő parancsban elhagytuk a záró perjelet:

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

Ha egy könyvtárat egy helyi rendszerről egy távoli rendszerre helyeznek át, ezt push műveletnek nevezik. Ezzel szemben, amikor egy távoli könyvtárat szinkronizálnak egy helyi rendszerrel, ezt pull műveletnek nevezik. A szintaxisa a következő:

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

Milyen egyéb lehetőségek vannak az rsync-ben?

Az rsync alapértelmezett viselkedése az alábbi opciók segítségével tovább testreszabható.

Nem tömörített fájlok átvitele rsync segítségével

A nem tömörített fájlok átvitelekor a hálózati terhelés a -z opcióval csökkenthető:

$ rsync -az source destination
bash

A folyamat megjelenítése és a megszakított átvitelek folytatás

-P opcióval kombinálhatja a --progress és --partial opciókat. Ezzel áttekintést kap az átvitelek előrehaladásáról, és egyúttal folytathatja a megszakított átviteleket is:

$ rsync -azP source destination
bash

Itt van az eredmény:

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

Futtassa újra a parancsot, hogy rövidebb kimenetet kapjon. Ez lehetővé teszi az rsync számára, hogy a változások időpontja alapján megállapítsa, történt-e változás.

$ rsync -azP source destination
bash

Itt van az eredmény:

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

A könyvtárak szinkronizálása az rsync segítségével

Ahhoz, hogy két könyvtár valóban szinkronban maradjon, szükséges törölni a célkönyvtárból azokat a fájlokat, amelyek már nincsenek a forráskönyvtárban. Az rsync azonban nem törli automatikusan a fájlokat a célkönyvtárból. Ez a --delete opcióval módosítható. Fontos azonban, hogy ezt az opciót óvatosan használjuk, mivel törli a célkönyvtárból azokat a fájlokat, amelyek már nem léteznek a forrásban.

Mielőtt ezt az opciót használná, használja a --dry-run opciót. Ez lehetővé teszi a szinkronizálási folyamat szimulálását anélkül, hogy tényleges fájlokat törölne. Így biztosíthatja, hogy csak a kívánt változtatások történjenek meg, anélkül, hogy véletlenül fontos adatokat veszítene el:

$ rsync -a --delete source destination
bash

Fájlok és könyvtárak kizárása a szinkronizálásból

Az rsync programban a --exclude opcióval kizárhat bizonyos fájlokat és könyvtárakat a szinkronizálásból. Ez akkor hasznos, ha például nem szeretné szinkronizálni az ideiglenes fájlokat, a naplófájlokat vagy más tartalmakat.

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

Ha megadott egy mintát a fájlok kizárásához, akkor a --include= opcióval felülírhatja ezt a kizárást bizonyos fájlok esetében, amelyek egy másik mintához illeszkednek.

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

Biztonsági másolatok mentése rsync segítségével

A --backup opció lehetővé teszi fontos fájlok biztonsági másolatainak mentését. A --backup-dir opcióval együtt használva megadható a biztonsági másolatok mentési helye:

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

A különböző biztonsági mentési forgatókönyvekről részletes áttekintést találhat az rsync segítségével végzett szerverbiztonsági mentésekről szóló cikkünkben.

Ugrás a főmenübe