Bevezetés
A Rsync, ami a “remote sync” rövidítése, egy távoli és helyi fájlszinkronizáló eszköz. Olyan algoritmust használ, amely minimalizálja a másolt adatok mennyiségét azáltal, hogy a fájloknak csak a megváltozott részeit mozgatja.
Ebben az útmutatóban ennek a nagy teljesítményű segédprogramnak az alapvető használatával foglalkozunk.
Mi az Rsync?
Az Rsync egy nagyon rugalmas, hálózatra képes szinkronizáló eszköz. A Linuxon és Unix-szerű rendszereken való elterjedtsége és a rendszerszkriptek eszközeként való népszerűsége miatt a legtöbb Linux-disztribúció alapértelmezésben tartalmazza.
Az alapszintaktika
A rsync
alapszintaktikája nagyon egyszerű, és az ssh, scp és cp rendszerekhez hasonlóan működik.
Elkészítünk két tesztkönyvtárat és néhány tesztfájlt a következő parancsokkal:
- cd ~
- mkdir dir1
- mkdir dir2
- touch dir1/file{1..100}
Most van egy dir1
nevű könyvtárunk, amelyben 100 üres fájl van.
- ls dir1
Outputfile1 file18 file27 file36 file45 file54 file63 file72 file81 file90file10 file19 file28 file37 file46 file55 file64 file73 file82 file91file100 file2 file29 file38 file47 file56 file65 file74 file83 file92file11 file20 file3 file39 file48 file57 file66 file75 file84 file93file12 file21 file30 file4 file49 file58 file67 file76 file85 file94file13 file22 file31 file40 file5 file59 file68 file77 file86 file95file14 file23 file32 file41 file50 file6 file69 file78 file87 file96file15 file24 file33 file42 file51 file60 file7 file79 file88 file97file16 file25 file34 file43 file52 file61 file70 file8 file89 file98file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Még van egy dir2
nevű üres könyvtárunk is.
Az dir1
könyvtár tartalmának a dir2
könyvtárral való szinkronizálásához ugyanazon a rendszeren írjuk be:
- rsync -r dir1/ dir2
A -r
opció rekurzívot jelent, ami a könyvtárak szinkronizálásához szükséges.
Ehelyett használhatjuk a -a
jelzőt is:
- rsync -a dir1/ dir2
A -a
opció egy kombinációs jelző. Az “archiválás” rövidítése, és rekurzívan szinkronizál, valamint megőrzi a szimbolikus hivatkozásokat, a speciális és eszközfájlokat, a módosítási időket, a csoportot, a tulajdonost és a jogosultságokat. Gyakrabban használatos, mint a -r
, és általában ezt szeretné használni.
Egy fontos megjegyzés
Észrevehette, hogy a fenti parancsokban az első argumentum végén egy záróvessző (/
) van:
- rsync -a dir1/ dir2
Ez azért szükséges, hogy “a dir1
tartalmát” jelentse. Az alternatíva, az utána lévő kötőjel nélkül, a dir1
-et, beleértve a könyvtárat is, a dir2
-be helyezné. Ez egy olyan hierarchiát hozna létre, amely így nézne ki:
- ~/dir2/dir1/
Az rsync parancs végrehajtása előtt mindig ellenőrizze kétszer az argumentumait. Az Rsync biztosít erre egy módszert a -n
vagy --dry-run
opciók átadásával. A -v
flag (a verbose jelszóhoz) is szükséges a megfelelő kimenethez:
- rsync -anv dir1/ dir2
Outputsending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .
Versenyezzük meg ezt a kimenetet azzal a kimenettel, amit akkor kapunk, ha eltávolítjuk a zárójelet:
- rsync -anv dir1 dir2
Outputsending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .
Láthatjuk, hogy itt maga a könyvtár kerül átvitelre.
How To Use Rsync to Sync with a Remote System
A távoli rendszerrel való szinkronizálás triviális, ha van SSH hozzáférése a távoli géphez és rsync
telepítve mindkét oldalon. Miután az SSH-hozzáférést igazoltuk a két gép között, a következő szintaxissal szinkronizálhatjuk a dir1
mappát a korábbiakból a távoli számítógépre (vegye figyelembe, hogy ebben az esetben a tényleges könyvtárat akarjuk átvinni, ezért elhagyjuk az utolsó ferdehajlatot):
- rsync -a ~/dir1 username@remote_host:destination_directory
Ezt a műveletet “push”-nak nevezzük, mert egy könyvtárat tol át a helyi rendszerről a távoli rendszerre. Az ellenkezője a “pull” művelet. Egy távoli könyvtár szinkronizálására szolgál a helyi rendszerrel. Ha a dir1
a helyi rendszerünk helyett a távoli rendszeren lenne, a szintaxis a következő lenne:
- rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
A cp
és hasonló eszközökhöz hasonlóan a forrás mindig az első argumentum, a cél pedig mindig a második.
Hasznos lehetőségek az Rsync-hez
Az Rsync számos lehetőséget biztosít a segédprogram alapértelmezett viselkedésének megváltoztatására. Néhány szükségesebb zászlót már tárgyaltunk.
Ha olyan fájlokat továbbítunk, amelyek még nincsenek tömörítve, például szöveges fájlokat, akkor a -z
opcióval történő tömörítés hozzáadásával csökkenthetjük a hálózati átvitelt:
- rsync -az source destination
A -P
zászló nagyon hasznos. Egyesíti a --progress
és a --partial
jelzőket. Az elsővel egy előrehaladási sávot kapunk az átvitelhez, a második pedig lehetővé teszi a megszakított átvitel folytatását:
- rsync -azP source destination
Outputsending 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). . .
Ha újra lefuttatjuk a parancsot, rövidebb kimenetet kapunk, mert nem történt változás. Ez jól szemlélteti az rsync azon képességét, hogy a módosítási idő alapján állapítja meg, hogy történt-e változás:
- rsync -azP source destination
Outputsending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00
A módosítási időt frissíthetjük néhány fájlon, és láthatjuk, hogy az rsync intelligensen csak a módosított fájlokat másolja újra:
- touch dir1/file{1..10}
- rsync -azP source destination
Outputsending incremental file listfile1 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)file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101). . .
Azért, hogy két könyvtár valóban szinkronban maradjon, szükséges a fájlok törlése a célkönyvtárból, ha azokat a forrásból eltávolították. Alapértelmezés szerint az rsync nem töröl semmit a célkönyvtárból.
Az --delete
opcióval megváltoztathatjuk ezt a viselkedést. Mielőtt ezt az opciót használnánk, használjuk a --dry-run
opciót, és végezzünk tesztelést az adatvesztés elkerülése érdekében:
- rsync -a --delete source destination
Ha a szinkronizálandó könyvtáron belül található bizonyos fájlokat vagy könyvtárakat ki szeretnénk zárni, akkor ezt a --exclude=
opciót követő, vesszővel elválasztott listában megadhatjuk őket:
- rsync -a --exclude=pattern_to_exclude source destination
Ha megadtunk egy kizárandó mintát, akkor a --include=
opcióval felülbírálhatjuk a kizárást a más mintának megfelelő fájlok esetében.
- rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
Végül az rsync --backup
opcióját használhatjuk a fontos fájlok biztonsági másolatainak tárolására. Ezt a --backup-dir
opcióval együtt kell használni, amely megadja azt a könyvtárat, ahol a biztonsági másolatokat tárolni kell.
- rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
Végkövetkeztetés
Az rsync leegyszerűsítheti a hálózati kapcsolatokon keresztüli fájlátvitelt, és robosztussá teheti a helyi könyvtárak szinkronizálását. Az rsync rugalmassága jó választássá teszi számos különböző fájlszintű művelethez.
Az rsync elsajátítása lehetővé teszi, hogy összetett biztonsági mentési műveleteket tervezzünk, és finom irányítást kapjunk arra vonatkozóan, hogy mi kerül átvitelre és hogyan.