Esittely
Rsync, joka on lyhenne sanoista ”remote sync” (etäsynkronointi), on etä- ja paikallinen tiedostojen synkronointityökalu. Se käyttää algoritmia, joka minimoi kopioitavan tiedon määrän siirtämällä vain muuttuneiden tiedostojen osat.
Tässä oppaassa käsittelemme tämän tehokkaan apuohjelman peruskäyttöä.
Mikä on Rsync?
Rsync on erittäin joustava verkkoa hyödyntävä synkronointityökalu.
Luomme kaksi testihakemistoa ja muutamia testitiedostoja seuraavilla komennoilla:
- cd ~
- mkdir dir1
- mkdir dir2
- touch dir1/file{1..100}
Meillä on nyt hakemisto dir1
, jossa on 100 tyhjää tiedostoa.
- 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
Meillä on myös tyhjä hakemisto nimeltä dir2
.
Synkronoidaksemme dir1
:n sisällön dir2
:n kanssa samassa järjestelmässä, kirjoita:
- rsync -r dir1/ dir2
Vaihtoehto -r
tarkoittaa rekursiivista, mikä on välttämätöntä hakemistojen synkronoinnissa.
Voisimme sen sijaan käyttää myös -a
-lippua:
- rsync -a dir1/ dir2
Vaihtoehto -a
on yhdistelmälippu. Se tarkoittaa ”arkistoa” ja synkronoi rekursiivisesti ja säilyttää symboliset linkit, erikois- ja laitetiedostot, muutosajat, ryhmän, omistajan ja käyttöoikeudet. Sitä käytetään yleisemmin kuin -r
, ja yleensä sitä halutaan käyttää.
Tärkeä huomautus
Olet ehkä huomannut, että yllä olevissa komennoissa ensimmäisen argumentin lopussa on perässä oleva vinoviiva (/
):
- rsync -a dir1/ dir2
Tämä on tarpeen, jotta se tarkoittaisi ”dir1
:n sisältöä”. Vaihtoehto, ilman perässä olevaa vinoviivaa, sijoittaisi dir1
hakemistoineen dir2
:n sisälle. Tämä loisi hierarkian, joka näyttäisi seuraavalta:
- ~/dir2/dir1/
Tarkista argumentit aina kahdesti ennen rsync-komennon suorittamista. Rsync tarjoaa menetelmän tämän tekemiseen välittämällä -n
– tai --dry-run
-optiot. Myös lippu -v
(verbose) on tarpeen, jotta saat asianmukaisen tulosteen:
- rsync -anv dir1/ dir2
Outputsending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .
Vertaile tätä tulostetta tulosteeseen, jonka saamme, kun poistamme perässä olevan vinoviivan:
- rsync -anv dir1 dir2
Outputsending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .
Tässä näet, että itse hakemisto siirtyy.
How To Use Rsync to Sync with a Remote System
Synkronointi etäjärjestelmään on triviaalia, jos sinulla on SSH-yhteys etäkoneeseen ja rsync
asennettuna molemmille puolille. Kun olet varmistanut SSH-yhteyden näiden kahden koneen välillä, voit synkronoida dir1
-kansion aiemmasta etäkoneeseen käyttämällä tätä syntaksia (huomaa, että tässä tapauksessa haluamme siirtää varsinaisen hakemiston, joten jätämme jäljessä olevan vinoviivan pois):
- rsync -a ~/dir1 username@remote_host:destination_directory
Tätä kutsutaan ”push”-operaatioksi, koska se työntää hakemiston paikallisesta järjestelmästä etäkoneeseen. Vastakkainen operaatio on ”pull”. Sitä käytetään synkronoimaan etähakemisto paikalliseen järjestelmään. Jos dir1
olisi etäjärjestelmässä paikallisen järjestelmämme sijasta, syntaksi olisi:
- rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
Kuten cp
ja vastaavat työkalut, lähde on aina ensimmäinen argumentti ja kohde on aina toinen.
Käyttökelpoiset vaihtoehdot Rsyncille
Rsync tarjoaa monia vaihtoehtoja, joilla voi muuttaa apuohjelman oletuskäyttäytymistä. Olemme jo käsitelleet joitakin tarpeellisimpia lippuja.
Jos siirrät tiedostoja, joita ei ole jo pakattu, kuten tekstitiedostoja, voit vähentää verkkosiirtoa lisäämällä pakkauksen -z
-optiolla:
- rsync -az source destination
Lippu -P
on erittäin hyödyllinen. Se yhdistää liput --progress
ja --partial
. Ensimmäisen avulla saat siirtojen edistymispalkin ja toisen avulla voit jatkaa keskeytyneitä siirtoja:
- 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). . .
Jos suoritamme komennon uudelleen, saamme lyhyemmän tulosteen, koska muutoksia ei ole tehty. Tämä havainnollistaa rsyncin kykyä käyttää muutosaikoja määrittämään, onko muutoksia tehty.
- rsync -azP source destination
Outputsending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00
Voimme päivittää joidenkin tiedostojen muutosajan ja nähdä, että rsync kopioi älykkäästi uudelleen vain muuttuneet tiedostot:
- 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). . .
Jotta kaksi hakemistoa pysyisivät aidosti synkronoituina, on tarpeen poistaa tiedostoja kohdehakemistosta, jos ne poistetaan lähdekansiosta. Oletusarvoisesti rsync ei poista mitään kohdehakemistosta.
Voidaan muuttaa tätä käyttäytymistä vaihtoehdolla --delete
. Ennen kuin käytät tätä vaihtoehtoa, käytä --dry-run
-vaihtoehtoa ja tee testauksia, jotta tietoja ei menetetä:
- rsync -a --delete source destination
Jos haluat sulkea pois tietyt tiedostot tai hakemistot, jotka sijaitsevat synkronoitavan hakemiston sisällä, voit tehdä sen määrittelemällä ne pilkulla erotettuun luetteloon --exclude=
-vaihtoehdon jälkeen:
- rsync -a --exclude=pattern_to_exclude source destination
Jos olemme määritelleet kuvion, jonka mukaan haluamme sulkea pois tiedostot, voimme ohittaa tämän poissulkemisen sellaisten tiedostojen kohdalla, jotka sopivat eri kuvioon, käyttämällä --include=
-valintaa.
- rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
Loppujen lopuksi rsyncin --backup
-vaihtoehtoa voidaan käyttää tärkeiden tiedostojen varmuuskopioiden tallentamiseen. Sitä käytetään yhdessä --backup-dir
-option kanssa, joka määrittää hakemiston, johon varmuuskopiotiedostot tallennetaan.
- rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
Johtopäätökset
Rsync voi yksinkertaistaa tiedostojen siirtoa verkkoyhteyksien yli ja lisätä paikallisiin hakemistosynkronointeihin varmuutta. rsyncin joustavuus tekee siitä hyvän vaihtoehdon moniin erilaisiin tiedostotason operaatioihin.
Rsyncin hallitseminen mahdollistaa monimutkaisten varmuuskopiointioperaatioiden suunnittelun ja hienojakoisen hallinnan siitä, mitä siirretään ja miten.