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.