Rsync: Komplett guide med 11 effektive eksempler

Introduksjon til Rsync: Et Kraftfullt Synkroniseringsverktøy

Rsync er et gratis og åpent kildekode-verktøy for kommandolinjen som muliggjør filsynkronisering både lokalt og eksternt. Dette verktøyet er ideelt for å overføre filer og kataloger mellom forskjellige steder.

Rsync er spesielt nyttig i situasjoner som datamigrering, sikkerhetskopiering og speiling av data. Dette gjør det til et uvurderlig verktøy for webansvarlige og systemadministratorer som ofte utfører repeterende dataoverføringsoppgaver.

I denne artikkelen vil vi utforske hvordan Rsync fungerer og presentere noen praktiske eksempler på hvordan du kan dra nytte av dette verktøyet.

Hvordan Rsync Fungerer

Rsync er et kommandolinjeverktøy for ekstern synkronisering, spesielt utviklet for Unix-baserte systemer. Det gir brukere en sømløs måte å overføre eller synkronisere filer mellom maskiner eller to verter.

I kjernen av Rsync finner vi en deltaoverføringsalgoritme. Denne algoritmen er designet for å kopiere endringene mellom to filer på tvers av to verter – kilde og destinasjon. Det er viktig å merke seg at både kilden og destinasjonen kan være enten lokale eller eksterne. Rsync kan utføre dataoverføring og synkronisering på to måter:

  • Ved hjelp av SSH eller RSH for å synkronisere mellom to verter.
  • Ved å bruke TCP Rsync-demonen for synkronisering.

Rsync er designet for å fungere på Unix-lignende systemer, inkludert Linux.

Her er en trinnvis oversikt over hvordan Rsync-prosessen fungerer:

  • Rsync etablerer en tilkobling til den eksterne verten via SSH og krever et passord.
  • Når tilkoblingen er opprettet, kommuniserer den eksterne Rsync-prosessen med kilden.
  • Deretter identifiserer programmene filene og katalogene som trenger synkronisering. Dette innebærer bruk av delta-overføringsalgoritmen for å analysere forskjeller mellom filene.

Hvis Rsync-kommandoen oppdager en fil på den eksterne maskinen som ikke finnes lokalt, vil den overføre den til det lokale systemet. For eksisterende filer på begge systemer, vil Rsync kun overføre forskjellene, det vil si de endrede delene. Eksisterende filer som ikke har endret seg, vil derimot bli ignorert.

Rsync oppnår inkrementelle oppdateringer ved å lagre endringene i en midlertidig fil før de overføres til målet.

Før du begynner, er det noen forutsetninger:

  • Du må ha root- eller sudo-rettigheter.
  • Du må ha tilgang til terminalen eller kommandolinjen.
  • SSH-tilgang er nødvendig for sikker kjøring av Rsync-kommandoer.
  • Du trenger også to maskiner for å bruke Rsync.

I denne veiledningen vil vi bruke Linux Mint 21.1 Vera. Du kan imidlertid enkelt følge med uavhengig av hvilken Linux-distribusjon du bruker.

Hvorfor Velge Rsync Fremfor Scp?

Scp (secure copy) er en mye brukt kommandolinjeprotokoll for filkopiering. Den følger en lineær tilnærming, som betyr at den kopierer hele filer fra kilde til destinasjon. For å sikre sikker overføring, benytter den SSH.

Syntaksen for scp-kommandoen ser slik ut:

scp [ALTERNATIV] KILDE DESTINASJON

Men hvorfor bør man foretrekke Rsync fremfor Scp?

Det er flere fordeler med å bruke Rsync:

  • Raskere utførelse: Rsync er raskere enn Scp fordi den bruker en ekstern oppdateringsprotokoll. Dette betyr at den bare overfører endringer i stedet for hele filen. Ved gjentatt synkronisering trenger du derfor kun å utføre en fullstendig kopi første gang. Deretter kopieres kun de endrede delene.
  • Redusert båndbredde: Siden Rsync ikke trenger å kopiere hele filen på nytt, reduseres båndbreddeforbruket. I tillegg bruker den komprimerings- og dekompresjonsalgoritmer for å minimere filstørrelsen under overføring.
  • Flere kommandolinjealternativer: Rsync tilbyr et bredere utvalg av kommandolinjealternativer enn Scp, som gir deg mer kontroll over synkroniseringsprosessen.

Kort sagt, Rsync er et utmerket verktøy for inkrementell synkronisering, mens Scp er nyttig for sikker filoverføring. I daglig bruk kan Scp være tilstrekkelig for enklere oppgaver, men for repeterende oppgaver anbefales Rsync.

Rsync Kommandosyntaks

Rsync-kommandoen har følgende struktur:

rsync [ALTERNATIV] KILDE DESTINASJON

Her er en forklaring på begrepene:

  • OPTION: Rsync-alternativer.
  • SOURCE: Kildekatalog.
  • DEST: Destinasjonskatalog.
  • BRUKER: Eksternt brukernavn.
  • HOST: Eksternt vertsnavn eller IP-adresse.

Alternativene er parametere som gir ekstra funksjonalitet. For eksempel kan du synkronisere data rekursivt med alternativet -r. Merk at -r ikke synkroniserer gruppe- og brukerrettigheter, tidsstempler, tillatelser eller symbolske lenker. For å ivareta alle disse attributtene, kan du bruke -a, som kjører kommandoen i arkivmodus.

Andre vanlige Rsync-alternativer inkluderer:

  • -z: Komprimer data for å spare plass.
  • -h: Vis lesbare utdata.
  • -b: Utfør sikkerhetskopiering under synkronisering.
  • -e: Bruk SSH for ekstern overføring.
  • --progress: Vis fremdriften under synkronisering.
  • -v: Vis detaljert utdata.
  • --dry-run: Kjør en testkjøring for å teste konfigurasjonen.
  • -q: Undertrykk utdata og meldinger.

Installasjon av Rsync

De fleste Unix- og Linux-systemer leveres med Rsync forhåndsinstallert. Hvis systemet ditt ikke har Rsync, kan du installere det med følgende kommandoer:

For Debian/Ubuntu og Mint:

sudo apt-get install rsync

For Arch Linux:

pacman -S rsync

På Gentoo:

emerge sys-apps/rsync

På CentOS/Fedora/REHL:

sudo yum install rsync

På openSUSE:

sudo zypper install rsync

Siden vi bruker Linux Mint, er Rsync allerede installert. Du kan bekrefte installasjonen ved å skrive rsync i terminalen. Dette vil vise versjon, funksjoner og annen relevant informasjon.

$ rsync
rsync  version 3.2.3  protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
    batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
    symtimes, prealloc, stop-at, no crtimes
Optimizations:
    SIMD, no asm, openssl-crypto
Checksum list:
    xxh128 xxh3 xxh64 (xxhash) md5 md4 none
Compress list:
    zstd lz4 zlibx zlib none

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.

La oss nå se Rsync i bruk gjennom ulike eksempler.

Vi oppretter først to kataloger for denne veiledningen:

  • kildekatalog
  • dest-katalog

Dette gjør du med følgende kommandoer:

mkdir source-directory
mkdir dest-directory
    

Vi genererer også noen testfiler for å demonstrere Rsync. La oss opprette 100 tomme filer i kildekatalogen med kommandoen:

touch source-directory/file{1..100}

Du kan bekrefte dette ved å bruke ls source-directory:

$ ls source-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

Merk at dest-katalogen er tom.

Kopiering av kataloger lokalt

Selv om Rsync primært er utviklet for å synkronisere filer mellom lokale og eksterne servere, er det like nyttig for å kopiere filer lokalt.

For lokal kopiering, bruker vi følgende Rsync-syntaks:

rsync [ALTERNATIV] KILDE DESTINASJON

For å kopiere filene fra kildekatalogen til destinasjonskatalogen, kjører du denne kommandoen:

rsync -r source-directory/ dest-directory

Her kopierer kommandoen rekursivt filene fra kildekatalogen til destinasjonskatalogen.

$ ls
dest-directory  source-directory
$ ls dest-directory
$ ls source-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99
$ rsync -r source-directory/ dest-directory
$ ls dest-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99
  

Dette vil kopiere alle filer fra kilde- til destinasjonskatalogen.

Kopiering av Enkeltfil Lokalt

Nå som vi har gått gjennom hvordan du synkroniserer kataloger, skal vi se på hvordan du kopierer en enkelt fil.

Vi starter med å endre innholdet i file1 i kildekatalogen og deretter synkronisere den med den tilsvarende filen i destinasjonskatalogen.

For å endre en fil, bruker du kommandoen:

nano source-directory/file1

Kopier og lim inn denne teksten inn i nano-editoren:

We're updating file1 in the source-directory.
Once we update, we'll push the new update to the dest-directory.
rsync doesn't need to re-copy the file using the delta-transfer algorithm.
This algorithm checks the differences and then updates destination files
accordingly.
So, once you save file1 in the source-directory, open file1 in
the dest-directory. It'll be empty.
However, if we check it after running rsync, you'll see that file1 in dest-directory
is updated.
  

Lukk og lagre filen.

La oss nå kopiere filen ved hjelp av Rsync:

sudo rsync -v --existing source-directory/file1 dest-directory
$ sudo rsync -v --existing source-directory/file1 dest-directory
file1

sent 557 bytes  received 35 bytes  1,184.00 bytes/sec
total size is 474  speedup is 0.80

$
  

Vi brukte alternativet --existing. Dette oppdaterer kun de eksisterende filene. Hvis du kjører kommandoen uten --existing, vil den ikke oppdatere filen, selv om den kjører uten feil.

Hvis filen du kopierer ikke finnes i målmappen, bruker du følgende kommando:

rsync -v source-directory/newfile dest-directory
$ rsync -v source-directory/newfile dest-directory
newfile

sent 82 bytes  received 35 bytes  234.00 bytes/sec
total size is 0  speedup is 0.00
  

Kopiering av Flere Filer

For å kopiere flere filer, må du spesifisere kildesti for hver fil, etterfulgt av destinasjonskatalogen.

Vi oppretter to nye filer, newfile2 og newfile3 i kildekatalogen. Dette gjøres med følgende kommando:

touch source-directory/newfile{2..3}

Bruk følgende kommando for å synkronisere flere filer:

rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
$ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
newfile2
newfile3

sent 135 bytes  received 54 bytes  378.00 bytes/sec
total size is 0  speedup is 0.00
$
    

Kopiering fra Lokal til Ekstern Server

Rsync-syntaksen for overføring fra lokal til ekstern server er som følger:

rsync [ALTERNATIV] KILDE [email protected]:DEST

Du må ha IP-adressen til den eksterne maskinen, som du angir etter kildefilen.

rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Før overføring starter, vil du bli bedt om et passord. Hvis brukernavnet er forskjellig på den eksterne maskinen, må du spesifisere det før IP-adressen med @:

rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory

Hvis du vil kopiere flere filer eller kataloger, spesifiserer du fil- eller katalogstier:

rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Spesifisering av Protokoll for Ekstern Overføring

Rsync lar deg velge filoverføringsprotokoll. Dette gjøres med -e-alternativet, etterfulgt av protokollen.

For eksempel, for å bruke SSH-protokollen, legger du til -e ssh:

rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Kopiering fra Ekstern til Lokal Server

Rsync-syntaksen for overføring fra ekstern til lokal server er som følger:

rsync [ALTERNATIV] [email protected]:SRC DEST

Dette fungerer som en «pull»-forespørsel. For å hente filer eller kataloger fra en ekstern server, bruker du denne kommandoen:

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Dette vil kopiere filene fra den eksterne serverens destinasjonskatalog til den lokale maskinens kildekatalog.

På samme måte kan du hente en bestemt fil ved å oppgi hele filstien:

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory

For å kopiere flere filer eller kataloger, angir du stiene i krøllparenteser (separert med kommaer) etter serverens IP-adresse:

rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory

Du kan også spesifisere individuelle filer.

Visning av Fremgang under Overføring

Det er ofte nyttig å se fremdriften for større overføringer. For å gjøre dette bruker du --progress-flagget. Dette viser overføringshastighet, gjenværende tid og mengde data som overføres:

rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Sletting av Kildefiler etter Overføring

For å fjerne kildefiler etter overføring, bruker du flagget --remove-source-files. Dette kan være nyttig for å sikre filer eller frigjøre plass:

rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Rsync Testkjøring

Rsync lar deg evaluere en operasjon før du utfører den. En testkjøring lar deg sjekke at du gjør de riktige tingene, slik at du unngår å oppdatere eller slette filer ved en feil.

For å gjøre en testkjøring, bruker du --dry-run-alternativet. Legg dette til kommandoen, etterfulgt av kilde og destinasjon:

sudo rsync -v --dry-run source-directory/file1 dest-directory
$ sudo rsync -v --dry-run source-directory/file1 dest-directory
file1

sent 43 bytes  received 19 bytes  124.00 bytes/sec
total size is 474  speedup is 7.65 (DRY RUN)
$
    

Utdataen ligner på en normal kjøring, men med (DRY RUN) på slutten.

Spesifisering av Minimum og Maksimum Filstørrelse

Rsync lar deg angi minimum eller maksimum filstørrelse for overføring.

For å overføre filer med en minimumsstørrelse på 15KB, bruk --min-size=15k:

rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Kommandoen vil kun kopiere filer med en minimumsstørrelse på 15KB. Filer som er mindre vil bli ignorert.

På samme måte kan du bruke flagget --max-size for å angi en maksimal filstørrelse:

rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Her vil Rsync ignorere filer som er større enn 450K.

Angi Båndbredde

Hvis du utfører andre båndbreddekrevende oppgaver, kan du begrense Rsync sin båndbreddebruk med --bwlimit=KB/s:

rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Her har vi satt båndbredden til 100 KB/s.

Avslutning

Dette avslutter vår guide til Rsync. Vi har gått gjennom hvordan du bruker Rsync og dekket en rekke vanlige kommandoer.

Rsync har mange flere funksjoner enn det vi har dekket. Du kan utforske disse ved å lese manualen (man-siden) for Rsync.

Du kan også undersøke jukseark for kommandolinjen for Windows, Linux og macOS.