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.