rsync er et gratis-å-bruke kommandolinjeverktøy som lar deg synkronisere filer lokalt og eksternt. Med den kan du overføre filer og kataloger.
Dette gjør det veldig nyttig for å migrere data, utføre sikkerhetskopier og speiling, noe som gjør det flott for webmastere og administratorer for gjentakende dataoverføringsoppgaver.
Denne artikkelen vil lære oss hvordan Rysnc fungerer og gi noen nyttige eksempler.
Innholdsfortegnelse
Hvordan fungerer rsync?
rsync er et kommandolinjeverktøy for ekstern synkronisering for Unix-lignende systemer. Det gir brukeren muligheten til å overføre/synkronisere filer mellom maskiner eller to verter sømløst.
Under panseret bruker rsync delta-overføringsalgoritmen. Denne algoritmen innebærer å kopiere forskjeller mellom de to filene på tvers av to verter (kilde og destinasjon). Kilden og destinasjonen kan være lokal eller ekstern. Kommandoen rsync kan utføre kopierings-/synkroniseringsdataoppgaver på to måter. Disse er:
- Bruk ssh, rsh for å kopiere/synkronisere mellom to verter.
- Bruk TCP rsync daemon for kopiering/synkronisering.
Siden den er designet for å fungere i Unix-lignende systemer, fungerer den også i Linux.
Trinn-for-trinn-prosessen rsync bruker som følger:
- Rsync bruker SSH for å koble til den eksterne verten og ber om et passord.
- Når den er koblet til, kommuniserer den eksterne vertens rsync med kilden.
- Disse programmene vil deretter bestemme filene og katalogene som må synkroniseres. Den bruker en delta-overføringsalgoritme for å sjekke forskjellen mellom filene.
Hvis rsync-kommandoen ikke finner en fil på fjernkontrollen, men ikke på verten, vil den kopiere og overføre den til vertssystemet. På samme måte, for allerede eksisterende filer (både på vert og ekstern), vil den kopiere forskjellen mellom dem (dvs. endrede deler). Til slutt vil den ignorere eksisterende filer på begge systemene uten endringer.
Kommandoen rsync oppnår inkrementelle oppdateringer ved å lagre forskjellen i en midlertidig fil før den skyves til målet.
Før du begynner:
- Du må ha root- eller sudo-privilegier
- Ha tilgang til terminalen/kommandolinjen
- SSH-tilgang for sikker kjøring av rsync-kommandoer
- Du trenger også to maskiner for å lage rsync.
For opplæringen skal vi bruke Linux Mint 21.1 Vera. Du kan enkelt følge veiledningen uten problemer ved å bruke noen annen Linux-distro.
Hvorfor bruke rsync Over Scp?
Scp (sikker kopi) er en populær kommandolinjeprotokoll som lar brukere kopiere filer. Den følger en lineær tilnærming til kopiering. Dette betyr at den ganske enkelt kopierer filene fra kilde til destinasjon. For å gjøre det sikkert bruker den SSH.
scp-kommandosyntaksen er som nedenfor:
scp option SOURCE DESTINATION
Men spørsmålet gjenstår, hvorfor bruke rsync over scp?
Vel, det er flere fordeler ved å bruke rsync. Disse fordelene inkluderer:
- Raskere utførelse: rsync er raskere enn scp fordi den bruker en ekstern oppdateringsprotokoll. Dette lar den overføre bare forskjeller i stedet for hele filen. Så hvis du setter opp en vanlig synkronisering over tid, trenger du bare å gjøre en fullstendig kopi første gang. Fra neste gang kopierer den kun de oppdaterte delene ved hjelp av delta-overføringsalgoritmen.
- Mindre båndbreddeforbruk: Siden rsync ikke trenger å kopiere hele filen på nytt, fører det til mindre båndbreddeforbruk. Dessuten bruker den også komprimerings-/dekompresjonsalgoritmer for å minimere filstørrelsen under overføring.
- Flere kommandolinjealternativer: rsync slår også scp i antall kommandolinjealternativer. Dette betyr at du kan finjustere rsync mer enn scp.
Avslutningsvis er rsync et utmerket inkrementelt synkroniseringsverktøy. scp-verktøyet er også nyttig for sikker overføring/synkronisering av filer. I et virkelighetsscenario er scp egnet for daglige oppgaver hvis du leter etter en mer enkel tilnærming. For tilbakevendende oppgaver, bruk imidlertid rsync.
rsync kommandosyntaks
rsync-kommandoen er som nedenfor:
Her er begrepene definert nedenfor:
- OPTION – Dette er rsync-alternativene
- SOURCE – Kildekatalog
- DEST – Destinasjonskatalog
- BRUKER – Eksternt brukernavn
- HOST – Eksternt vertsnavn eller IP-adresse
Alternativene er parametere som tilbyr ekstra funksjonalitet til kommandoen. Du kan for eksempel synkronisere data rekursivt med alternativet -r. Alternativet -r synkroniserer imidlertid ikke eierskap for grupper og brukere, tidsstempler, tillatelser eller symbolske lenker. I stedet kan du bruke alternativet -a, som kjører kommandoen i arkivmodus, og 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: gir menneskelesbare formatutdata
- -b: utfører sikkerhetskopiering under datasynkroniseringsprosessen
- -e: bruk SSH-protokoll for eksterne dataoverføringer
- -fremdrift: Vis fremdriften for datasynkronisering
- -v: spør rsync om å vise detaljert utgang
- –n: utfør en tørrkjøring for å teste ut innstillinger og oppsett for datasynkronisering
- -q: undertrykk rsync kommandoutgang og alternativer
Installerer rsync
De fleste Unix- og Linux-systemer leveres med rsync installert. Hvis systemet ditt ikke har rsync, kan du installere det ved å bruke følgende kommando(er).
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 har Linux Mint, kom rsync forhåndsinstallert. Så du kan kjøre rsync-kommandoen i terminalen for å se om den er installert. Den vil forklare dens evner, alternativer og annen viktig informasjon hvis den er til stede.
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å se rsync i aksjon med forskjellige brukstilfeller.
For opplæringen skal vi lage to kataloger.
- kildekatalog
- dest-katalog
For det må du skrive inn følgende kommandoer.
mkdir source-directory mkdir dest-directory
Vi må også generere filer for å få rsync til å fungere. Så la oss lage noen testfiler med kommandoen nedenfor.
touch source-directory/file{1..100}
Dette lager 100 tomme filer i kildekatalogen. Du kan bekrefte det ved å skrive inn kommandoen nedenfor.
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: Vi har holdt dest-katalogen tom.
Kopier kataloger lokalt rekursivt
Selv om rsync primært tar sikte på å kopiere filer mellom en lokal og ekstern server, er det like nyttig for å kopiere filer lokalt.
I dette tilfellet bruker vi følgende rsync-syntaks.
rsync-alternativ KILDEDESTINASJON
Kopier filene i kildekatalogen vår til målkatalogen ved å kjøre følgende kommando.
rsync -r source-directory/ dest-directory
Her kopierer kommandoen «rekursivt» filene fra kildekatalogen til målkatalogen.
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 kopierer hver enkelt fil i kildekatalogen til dest-katalogen.
Kopier enkeltfil lokalt
Nå som vi har lært hvordan du synkroniserer to kataloger, lærer vi hvordan du kopierer en enkelt fil.
For dette formålet vil vi redigere den tomme filen file1 i kildekatalogen og deretter synkronisere den med den samme filen som finnes i dest-katalogen.
For å redigere en fil, skriv inn følgende kommando.
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
Nå, lukk og lagre filen.
La oss nå kopiere filen med 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 $
Som du kanskje har lagt merke til, brukte vi –eksisterende alternativ. Dette oppdaterer de eksisterende filene. Hvis du kjører kommandoen uten –eksisterende, vil den ikke oppdateres, selv om den kjører vellykket.
Hvis enkeltfilen du kopierer ikke finnes i målmappen, må du kjøre 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 har tenkt å kopiere flere filer, må du nevne begge filenes kildestier, etterfulgt av målkatalogen.
For dette formålet vil vi opprette to nye filer: newfile2 og newfile3, i kildekatalogen. Kjør følgende kommando for å gjøre det.
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 $
Kopier fil eller katalog fra lokal til ekstern
rsync-syntaksen for lokal til ekstern overføring er som nedenfor.
rsync option SOURCE [email protected]:DEST
Som du kan se, må du vite IP-adressen til den eksterne maskinen for å få dette til å fungere. Du må også legge til IP-adressen etter kildefilen.
rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Før du starter overføringen, vil den be om passordet. Skriv den inn for å fortsette. Dessuten, hvis brukeren er annerledes i den eksterne maskinen, må du nevne den før IP-adressen etterfulgt av @.
rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory
Hvis du har tenkt å kopiere flere filer eller kataloger, må du liste filene eller katalogbanene. Syntaksen for det er nedenfor.
rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Ekstern overføringsspesifikke protokoller
rsync lar deg spesifisere spesifikke filoverføringsprotokoller. For å gjøre det, må du bruke alternativet -e, etterfulgt av protokollen.
For eksempel, hvis du 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
Kopiere en fil eller katalog fra ekstern til lokal
rsync-syntaksen for lokal til ekstern overføring er som nedenfor.
sync option [email protected]:SRC DEST
Dette fungerer som en pull-forespørsel. Så for å få de nødvendige filene/katalogen 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
Kommandoen trekker filene i den eksterne maskinens målkatalog til den lokale maskinens kildekatalog.
På samme måte kan du trekke en bestemt fil ved å nevne den gjennom hele banen.
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 banen innenfor de krøllede parentesene (atskilt 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
På samme måte kan du også nevne filer.
Vis direkte fremgang under overføring
Det er en god idé å se fremdriften for større sikkerhetskopiering av data. For det må du bruke –progress-flagget. Legg den til rsync-kommandoen, og du kan 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 når overføringen er fullført
Du kan bruke flagget -remove-source-files for å fjerne kildefiler etter fullført overføring. Dette kan hjelpe deg i mange scenarier, spesielt når det gjelder å sikre filene dine uten å etterlate spor eller bare bruke dem for å frigjøre plass.
rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
rsync tørrkjøring
Rysnc lar deg også evaluere før du kjører et faktisk løp. Tørrløpet lar deg se om du gjør det rette. Tross alt vil du ikke oppdatere filer ved en feil eller til og med slette dem.
Du må bruke -tørrkjøringsalternativet for å gjøre en tørrkjøring. Legg den 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
Utgangen er lik hvordan vi kjørte den før. Du vil imidlertid legge merke til en omtale av (DRY RUN) på slutten av utgangen.
Angi minimum og maksimum filstørrelse
Rysnc lar deg også angi minimum eller maksimum filstørrelse under overføring.
Så hvis du vil overføre med en minimumsstørrelse på 15KB, 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
Kommandoen vil bare kopiere filer med en minimum filstørrelse på 15KB. Hvis filstørrelsen er under, vil den ignorere den.
På samme måte 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 filer over 450K-størrelsen.
Angi båndbreddegrense
Hvis du gjør andre båndbreddekrevende oppgaver, kan du angi rysnc for å angi båndbreddegrensen for overføringen. For å gjøre det, 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 100Kb/s under overføringen.
Siste ord
Dette fører oss til slutten av vår rsync-kommandoguide. Vi lærte å bruke rysnc og dekket mange kommandoer effektivt.
Rysnc tilbyr imidlertid mye mer enn det vi dekket. Det er derfor du kanskje også vil gå gjennom rsync-man-siden, der alle aspekter av rsync er dekket.
Deretter kan du sjekke ut kommandolinje-jukseark for Windows, Linux og macOS.