Mester rsync: Synkroniser filer effektivt med disse 11 eksemplene!

En Dyptgående Innføring i rsync: Synkroniser Filer og Kataloger Effektivt

rsync er et gratis kommandolinjeverktøy som muliggjør synkronisering av filer både lokalt og eksternt. Det er et kraftfullt verktøy for overføring av filer og mapper.

Denne funksjonaliteten er svært nyttig ved datamigrering, opprettelse av sikkerhetskopier og speiling. Derfor er det et uvurderlig verktøy for webansvarlige og administratorer som ofte utfører dataoverføringsoppgaver.

I denne artikkelen skal vi utforske hvordan rsync fungerer og se på noen nyttige eksempler.

Hvordan Fungerer rsync?

rsync er et kommandolinjeverktøy designet for ekstern synkronisering på Unix-lignende systemer. Det gir brukerne muligheten til å overføre eller synkronisere filer mellom ulike maskiner eller to servere på en sømløs måte.

rsync bruker en delta-overføringsalgoritme. Denne algoritmen innebærer å kun overføre forskjellene mellom to filer på tvers av to servere (kilde og destinasjon). Kilden og destinasjonen kan være både lokale og eksterne. rsync-kommandoen kan utføre kopierings- og synkroniseringsoperasjoner på to måter:

  • Ved hjelp av ssh eller rsh for å kopiere eller synkronisere mellom to servere.
  • Ved hjelp av TCP rsync daemon for kopiering eller synkronisering.

Verktøyet er utviklet for å fungere i Unix-lignende miljøer, og er derfor også kompatibelt med Linux.

Fremgangsmåten rsync bruker trinnvis er som følger:

  • rsync bruker SSH for å etablere en forbindelse til den eksterne serveren og ber om et passord.
  • Når tilkoblingen er opprettet, kommuniserer den eksterne rsync-prosessen med kildeprosessen.
  • Disse prosessene analyserer filene og mappene som skal synkroniseres. En delta-overføringsalgoritme brukes for å identifisere forskjellene mellom filene.

Hvis rsync-kommandoen oppdager en fil som finnes på den eksterne serveren, men ikke på kilden, vil den kopiere og overføre den til kildesystemet. På samme måte vil verktøyet for filer som allerede finnes på begge systemer kun kopiere de endrede delene (forskjellene). Til slutt vil eksisterende filer som er identiske på begge systemer, ignoreres.

rsync utfører inkrementelle oppdateringer ved å midlertidig lagre forskjellene i en mellomliggende fil før de overføres til destinasjonen.

Før du begynner:

  • Du trenger root- eller sudo-tilgang.
  • Tilgang til terminalen eller kommandolinjen er nødvendig.
  • SSH-tilgang er påkrevd for å kjøre rsync-kommandoer sikkert.
  • Du trenger også to maskiner for å sette opp rsync.

I denne veiledningen skal vi bruke Linux Mint 21.1 Vera. Du kan følge veiledningen uten problemer med en annen Linux-distribusjon.

Hvorfor Velge rsync Fremfor Scp?

Scp (sikker kopi) er en anerkjent kommandolinjeprotokoll som brukes til å kopiere filer. Den benytter en lineær tilnærming til kopiering, noe som betyr at den ganske enkelt overfører filer fra kilden til destinasjonen ved hjelp av SSH for å sikre overføringen.

Syntaksen for scp-kommandoen ser slik ut:

scp [OPTION] SOURCE DESTINATION

Spørsmålet som gjenstår er: Hvorfor bør du velge rsync fremfor scp?

Det er flere fordeler med å bruke rsync. Disse fordelene inkluderer:

  • Høyere Overføringshastighet: rsync er raskere enn scp fordi den bruker en protokoll for ekstern oppdatering. Dette gjør at den kun overfører endringene, ikke hele filen. Ved gjentatte synkroniseringer vil en fullstendig kopi kun være nødvendig første gang. Deretter overføres bare oppdateringene ved hjelp av delta-overføringsalgoritmen.
  • Redusert Båndbreddeforbruk: Siden rsync ikke trenger å kopiere hele filen på nytt, reduseres båndbreddeforbruket betydelig. I tillegg benyttes kompresjons- og dekompresjonsalgoritmer for å minimere filstørrelsen under overføring.
  • Flere Kommandoalternativer: rsync tilbyr også flere kommandoalternativer enn scp, noe som gir deg mer kontroll og mulighet for finjustering.

Som en konklusjon er rsync et utmerket verktøy for inkrementell synkronisering. scp er også et nyttig verktøy for sikker filoverføring og synkronisering. I praksis kan scp være passende for enkle daglige oppgaver. For gjentakende oppgaver er imidlertid rsync det beste valget.

rsync Kommandosyntaks

Grunnleggende rsync-kommando:

rsync [OPTION] SOURCE DEST

For en fjernsynkronisering:

rsync [OPTION] SOURCE [USER@]HOST:DEST

Begrepene forklart:

  • OPTION – Dette er rsync-alternativene
  • SOURCE – Kildekatalog
  • DEST – Destinasjonskatalog
  • USER – Eksternt brukernavn
  • HOST – Eksternt vertsnavn eller IP-adresse

Alternativene er parametere som gir tilleggsfunksjonalitet til kommandoen. For eksempel kan du synkronisere data rekursivt ved hjelp av alternativet -r. Alternativet -r synkroniserer imidlertid ikke eierskap, tidsstempler, tillatelser eller symbolske lenker. For å bevare disse attributtene kan du bruke alternativet -a, som kjører kommandoen i arkivmodus. Dette sikrer at alle filens eierskap, tillatelser og symbolske lenker beholdes når du kopierer.

Andre rsync-alternativer inkluderer:

  • -z: Komprimer data for å spare plass
  • -h: Viser utdata i et menneskelesbart format
  • -b: Utfører sikkerhetskopier under datasynkroniseringen
  • -e: Bruk SSH-protokollen for eksterne dataoverføringer
  • –progress: Vis fremdriften for datasynkroniseringen
  • -v: Vis detaljerte utdata fra rsync
  • –n: Utfør en tørrkjøring for å teste innstillinger og oppsett for datasynkronisering
  • -q: Undertrykk utdata og alternativer fra rsync

Installere rsync

De fleste Unix- og Linux-systemer har rsync forhåndsinstallert. Hvis systemet ditt mangler 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

For Gentoo:

emerge sys-apps/rsync

For CentOS/Fedora/RHEL:

sudo yum install rsync

For openSUSE:

sudo zypper install rsync

Siden vi bruker Linux Mint, er rsync allerede installert. Du kan bekrefte dette ved å kjøre rsync-kommandoen i terminalen. Den vil da vise en beskrivelse av funksjonene, alternativene og annen viktig informasjon.

    nitt ~
    $ 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å demonstrere bruken av rsync med noen praktiske eksempler.

For denne opplæringen skal vi opprette to mapper:

  • kildekatalog
  • dest-katalog

Bruk følgende kommandoer for å opprette dem:

    mkdir source-directory
    mkdir dest-directory
  

Vi trenger også å generere noen filer for at rsync skal ha noe å arbeide med. La oss lage noen testfiler med kommandoen nedenfor:

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

Dette vil opprette 100 tomme filer i kildekatalogen. Du kan bekrefte dette ved å skrive inn følgende kommando:

    ls source-directory
    Output:
    nitt rsync-tutorial
    $ ls
    dest-directory  source-directory
    nitt rsync-tutorial
    $ touch source-directory/file{1..100}
    nitt rsync-tutorial
    $ 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: Dest-katalogen er tom.

Rekursiv Lokal Kopiering av Kataloger

Selv om rsync primært er utviklet for å overføre filer mellom lokale og eksterne servere, fungerer det like godt for lokale kopieringsoperasjoner.

I dette tilfellet bruker vi følgende rsync-syntaks:

rsync [OPTION] SOURCE DESTINATION

Kopier filene fra kildekatalogen til målkatalogen ved å kjøre denne kommandoen:

rsync -r source-directory/ dest-directory

Denne kommandoen vil kopiere alle filer og underkataloger fra kildekatalogen til destinasjonskatalogen «rekursivt».

      nitt rsync-tutorial
      $ ls
      dest-directory  source-directory
      nitt rsync-tutorial
      $ ls dest-directory
      nitt rsync-tutorial
      $ 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
      nitt rsync-tutorial
      $ rsync -r source-directory/ dest-directory
      nitt rsync-tutorial
      $ 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 filene i kildekatalogen til destinasjonskatalogen.

Lokal Kopiering av Enkelte Filer

Nå som vi har lært å synkronisere to mapper, skal vi se hvordan du kopierer en enkelt fil.

For å demonstrere dette, skal vi endre den tomme filen «file1» i kildekatalogen og deretter synkronisere den med den samme filen i dest-katalogen.

Skriv inn følgende kommando for å redigere filen:

nano source-directory/file1

Kopier og lim inn følgende tekst 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.
    

Legge til innhold i en fil

Lukk og lagre filen.

La oss nå kopiere filen ved hjelp av rsync:

sudo rsync -v --existing source-directory/file1 /dest-directory
      #Output
      nitt rsync-tutorial
      $ 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

      nitt rsync-tutorial
      $
    

Vi brukte alternativet «–existing» for å oppdatere eksisterende filer. Hvis du kjører kommandoen uten –existing, vil den ikke oppdatere filen, selv om overføringen er vellykket.

Hvis filen du kopierer ikke finnes i destinasjonsmappen, må du bruke følgende kommando:

rsync -v source-directory/newfile dest-directory
      #Output
      nitt rsync-tutorial
      $ 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

Hvis du ønsker å kopiere flere filer, må du spesifisere alle kildestiene, etterfulgt av destinasjonskatalogen.

For å demonstrere dette, skal vi lage to nye filer: newfile2 og newfile3, i kildekatalogen. Kjør følgende kommando for å opprette dem:

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

Bruk nå følgende kommando for å synkronisere flere filer:

rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
      #Output
      nitt rsync-tutorial
      $ 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
      nitt rsync-tutorial
      $
    

Kopiering av Fil eller Katalog Fra Lokal til Ekstern Server

Syntaksen for overføring fra lokal til ekstern server er som følger:

rsync [OPTION] SOURCE [email protected]:DEST

Som du ser, må du kjenne IP-adressen til den eksterne maskinen for at dette skal fungere. Du må også spesifisere IP-adressen etter kildefilen.

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

Før overføringen starter, vil den be om et passord. Skriv det inn for å fortsette. Hvis brukernavnet er annerledes på den eksterne maskinen, må du også spesifisere dette før IP-adressen, adskilt med @.

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

Hvis du ønsker å kopiere flere filer eller mapper, må du liste filene eller mappestiene. Syntaksen for dette er:

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

Spesifikke Protokoller for Ekstern Overføring

rsync lar deg også spesifisere hvilke filoverføringsprotokoller du vil bruke. For å gjøre dette, må du bruke alternativet -e, etterfulgt av protokollen.

Hvis du for eksempel vil bruke ssh-protokollen, må du legge til «-e ssh» til rsync-kommandoen.

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

Kopiering av Fil eller Katalog Fra Ekstern til Lokal Server

Syntaksen for overføring fra ekstern til lokal server er:

rsync [OPTION] [email protected]:SRC DEST

Dette fungerer som en «pull-forespørsel». For å hente filer eller kataloger fra en ekstern server til din lokale maskin, må du kjøre følgende kommando:

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

Denne kommandoen vil hente filene fra dest-katalogen på den eksterne maskinen til kildekatalogen på din lokale maskin.

På samme måte kan du hente en bestemt fil ved å spesifisere hele stien.

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

For å kopiere flere filer eller kataloger fra lokal til ekstern, må du spesifisere stiene innenfor krøllparenteser (separert med komma) etter serverens IP-adresse.

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

På samme måte kan du spesifisere filene på samme måte.

Vis Fremdrift Under Overføring

Det kan være nyttig å se fremdriften under større dataoverføringer. For å gjøre dette, må du bruke flagget «–progress». Legg det til rsync-kommandoen, og du vil se overføringshastigheten, gjenværende tid og mengden data som overføres.

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

Slett Kildefiler Etter Overføring

Du kan bruke flagget «–remove-source-files» for å slette kildefiler etter at overføringen er fullført. Dette kan være nyttig i mange situasjoner, spesielt for å sikre filene dine uten å etterlate spor, eller for å frigjøre diskplass.

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

rsync Tørrkjøring

rsync lar deg også evaluere kommandoene dine før du utfører den faktiske overføringen. Tørrkjøringsmodusen lar deg se om du gjør det riktig. Dette er spesielt nyttig for å unngå å oppdatere eller slette filer ved en feil.

Du må bruke alternativet «–dry-run» for å utføre en tørrkjøring. Legg det til kommandoen, etterfulgt av kilden og destinasjonen.

sudo rsync -v --dry-run source-directory/file1 dest-directory
      nitt rsync-tutorial
      $ 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)
      nitt rsync-tutorial
    

Resultatet er likt det vi fikk før, men du vil se en referanse til «(DRY RUN)» på slutten.

Angi Minimum og Maksimum Filstørrelse

rsync lar deg også angi minimum eller maksimum filstørrelse for overføringen.

Hvis du for eksempel bare vil overføre filer med en minimumsstørrelse på 15 KB, må du bruke «–min-size=15k».

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

Denne kommandoen vil bare kopiere filer som er minst 15 KB store. Filer som er mindre, vil bli ignorert.

Tilsvarende kan du bruke flagget «–max-size» for å angi 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 alle filer som er større enn 450 KB.

Angi Båndbreddebegrensning

Hvis du utfører andre båndbreddekrevende oppgaver, kan du angi båndbreddebegrensning for rsync-overføringen. For å gjøre dette, bruk «–bwlimit=KB/s».

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

Her setter vi båndbredden til 100 KB/s under overføringen.

Avslutning

Dette bringer oss til slutten av vår rsync-veiledning. Vi har utforsket hvordan rsync brukes, og sett på mange av dens funksjoner.

rsync har imidlertid mange flere muligheter enn det vi har dekket. Det kan derfor være lurt å se på rsync-man-siden, hvor alle aspekter av rsync er beskrevet i detalj.

Etter dette kan det være nyttig å se på snarveier for kommandolinjen for Windows, Linux og macOS.