rsync er et gratis kommandolinjeværktøj, der lader dig synkronisere filer lokalt og eksternt. Med det kan du overføre filer og mapper.
Dette gør det meget nyttigt til migrering af data, udførelse af sikkerhedskopier og spejling, hvilket gør det fantastisk til webmastere og administratorer til tilbagevendende dataoverførselsopgaver.
Denne artikel vil lære os, hvordan Rysnc fungerer, og give nogle nyttige eksempler.
Indholdsfortegnelse
Hvordan virker rsync?
rsync er et kommandolinjeværktøj til fjernsynkronisering til Unix-lignende systemer. Det giver brugeren mulighed for at overføre/synkronisere filer mellem maskiner eller to værter problemfrit.
Under motorhjelmen bruger rsync delta-overførselsalgoritmen. Denne algoritme involverer kopiering af forskelle mellem de to filer på tværs af to værter (kilde og destination). Kilden og destinationen kan være lokal eller ekstern. Kommandoen rsync kan udføre kopierings-/synkroniseringsdataopgaver på to måder. Disse er:
- Brug ssh, rsh til at kopiere/synkronisere mellem to værter.
- Brug TCP rsync daemon til kopiering/synkronisering.
Da det er designet til at fungere i Unix-lignende systemer, fungerer det også i Linux.
Trin-for-trin processen rsync bruger som følger:
- Rsync bruger SSH til at oprette forbindelse til fjernværten og beder om en adgangskode.
- Når den er tilsluttet, kommunikerer fjernværtens rsync med kilden.
- Disse programmer vil derefter bestemme de filer og mapper, der skal synkroniseres. Den bruger en delta-overførselsalgoritme til at kontrollere forskellen mellem filerne.
Hvis kommandoen rsync ikke finder en fil på fjernbetjeningen, men ikke på værten, kopierer den og overfører den til værtssystemet. Tilsvarende vil den for allerede eksisterende filer (både på vært og fjernbetjening) kopiere forskellen mellem dem (dvs. ændrede dele). Endelig vil den ignorere eksisterende filer på begge systemer uden ændringer.
Kommandoen rsync opnår trinvise opdateringer ved at gemme forskellen i en midlertidig fil, før den skubbes til destinationen.
Før du starter:
- Du skal have root- eller sudo-privilegier
- Har adgang til terminalen/kommandolinjen
- SSH-adgang til sikker kørsel af rsync-kommandoer
- Du skal også bruge to maskiner for at lave rsync.
Til selvstudiet skal vi bruge Linux Mint 21.1 Vera. Du kan nemt følge vejledningen uden problemer ved at bruge nogen anden Linux-distro.
Hvorfor bruge rsync Over Scp?
Scp (sikker kopi) er en populær kommandolinjeprotokol, der lader brugere kopiere filer. Det følger en lineær tilgang til kopiering. Det betyder, at den blot kopierer filerne fra kilde til destination. For at gøre det sikkert bruger den SSH.
scp-kommandosyntaksen er som nedenfor:
scp option SOURCE DESTINATION
Men spørgsmålet er, hvorfor bruge rsync over scp?
Nå, der er flere fordele ved at bruge rsync. Disse fordele omfatter:
- Hurtigere udførelse: rsync er hurtigere end scp, fordi den bruger en ekstern opdateringsprotokol. Dette gør det muligt kun at overføre forskelle i stedet for hele filen. Så hvis du opsætter en almindelig synkronisering over tid, behøver du kun at lave en fuld kopi første gang. Fra næste gang kopierer den kun de opdaterede dele ved hjælp af delta-overførselsalgoritmen.
- Mindre båndbreddeforbrug: Da rsync ikke behøver at kopiere hele filen igen, fører det til mindre båndbreddeforbrug. Desuden bruger den også komprimerings-/dekompressionsalgoritmer til at minimere filstørrelsen under overførsel.
- Flere kommandolinjeindstillinger: rsync slår også scp i antallet af kommandolinjeindstillinger. Det betyder, at du kan finjustere rsync mere end scp.
Afslutningsvis er rsync et fremragende inkrementelt synkroniseringsværktøj. scp-værktøjet er også nyttigt til sikker overførsel/synkronisering af filer. I et scenarie i den virkelige verden er scp velegnet til daglige opgaver, hvis du leder efter en mere ligetil tilgang. Til tilbagevendende opgaver skal du dog bruge rsync.
rsync kommandosyntaks
Kommandoen rsync er som nedenfor:
Her er begreberne defineret nedenfor:
- OPTION – Dette er rsync-indstillingerne
- SOURCE – Kildekatalog
- DEST – Destinationskatalog
- USER – Fjernbrugernavn
- HOST – Fjernværtsnavn eller IP-adresse
Indstillingerne er parametre, der tilbyder yderligere funktionalitet til kommandoen. For eksempel kan du synkronisere data rekursivt med -r-indstillingen. Indstillingen -r synkroniserer dog ikke ejerskab for grupper og brugere, tidsstempler, tilladelser eller symbolske links. I stedet kan du bruge indstillingen -a, som kører kommandoen i arkivtilstand, hvilket sikrer, at alle filens ejerskab, tilladelser og symbolske links bevares ved kopiering.
Andre rsync-indstillinger inkluderer:
- -z: komprimer data for at spare plads
- -h: giver et output, der kan læses af mennesker
- -b: udfører backup under datasynkroniseringsprocessen
- -e: brug SSH-protokol til fjerndataoverførsler
- -fremskridt: Vis datasynkroniseringens fremskridt
- -v: spørg rsync om at vise detaljeret output
- –n: Udfør en tørkørsel for at teste indstillinger og opsætning til datasynkronisering
- -q: undertrykke rsync kommando output og muligheder
Installerer rsync
De fleste Unix- og Linux-systemer leveres med rsync installeret. Hvis dit system ikke har rsync, kan du installere det ved hjælp af følgende kommando(er).
Til Debian/Ubuntu og Mint
sudo apt-get install rsync
Til 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
Da vi har Linux Mint, kom rsync forudinstalleret. Så du kan køre kommandoen rsync i terminalen for at se, om den er installeret. Den vil forklare dens muligheder, muligheder og andre vigtige oplysninger, 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.
Lad os nu se rsync i aktion med forskellige use cases.
Til selvstudiet skal vi lave to mapper.
- kilde-mappe
- dest-mappe
Til det skal du skrive følgende kommandoer.
mkdir source-directory mkdir dest-directory
Vi bliver også nødt til at generere filer for at få rsync til at fungere. Så lad os oprette nogle testfiler med kommandoen nedenfor.
touch source-directory/file{1..100}
Dette skaber 100 tomme filer i kildemappen. Du kan bekræfte det ved at indtaste 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
Bemærk: Vi har holdt dest-mappen tom.
Kopier mapper lokalt rekursivt
Selvom rsync primært har til formål at kopiere filer mellem en lokal og en ekstern server, er det lige så nyttigt til at kopiere filer lokalt.
I dette tilfælde vil vi bruge følgende rsync-syntaks.
rsync-indstilling KILDEDESTINATION
Kopier filerne i vores kildebibliotek til dest-mappen ved at køre følgende kommando.
rsync -r source-directory/ dest-directory
Her kopierer kommandoen “rekursivt” filerne fra kilde-mappen til dest-mappen.
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 kildebiblioteket til dest-mappen.
Kopier enkelt fil lokalt
Nu hvor vi har lært, hvordan man synkroniserer to mapper, lærer vi, hvordan man kopierer en enkelt fil.
Til dette formål vil vi redigere den tomme fil fil1 i kildebiblioteket og derefter synkronisere den med den samme fil, der findes i destmappen.
For at redigere en fil skal du skrive følgende kommando.
nano source-directory/file1
Kopier og indsæt nu 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.
Tilføjelse af indhold til en fil
Luk nu og gem filen.
Lad os nu kopiere filen ved hjælp af 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 måske har bemærket, brugte vi -eksisterende mulighed. Dette opdaterer de eksisterende filer. Hvis du kører kommandoen uden –eksisterende, opdateres den ikke, selvom den kører med succes.
Hvis den enkelte fil, du kopierer, ikke findes i destinationsmappen, skal du kø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 af flere filer
Hvis du har til hensigt at kopiere flere filer, skal du nævne begge filers kildestier efterfulgt af målmappen.
Til dette formål vil vi oprette to nye filer: newfile2 og newfile3, i kildebiblioteket. Kør følgende kommando for at gøre det.
touch source-directory/newfile{2..3}
Brug nu følgende kommando til at 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 bibliotek fra lokal til ekstern
rsync-syntaksen for lokal til fjernoverførsel er som nedenfor.
rsync option SOURCE [email protected]:DEST
Som du kan se, skal du kende IP-adressen på den eksterne maskine for at få dette til at fungere. Du skal også tilføje IP-adressen efter kildefilen.
rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Før du starter overførslen, vil den bede om adgangskoden. Indtast den for at fortsætte. Også, hvis brugeren er anderledes i den eksterne maskine, så skal du nævne det før IP-adressen efterfulgt af @.
rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory
Hvis du har til hensigt at kopiere flere filer eller mapper, skal du angive filerne eller mappestierne. 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
Fjernoverførselsspecifikke protokoller
rsync lader dig angive specifikke filoverførselsprotokoller. For at gøre det skal du bruge -e-indstillingen, efterfulgt af protokollen.
For eksempel, hvis du vil bruge ssh-protokollen, skal du tilføje -e ssh til kommandoen rsync.
rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Kopiering af en fil eller mappe fra fjernbetjening til lokal
rsync-syntaksen for lokal til fjernoverførsel er som nedenfor.
sync option [email protected]:SRC DEST
Dette fungerer som en pull-anmodning. Så for at få de nødvendige filer/mappe fra en fjernserver til din lokale maskine, skal du køre følgende kommando.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Kommandoen trækker filerne i fjernmaskinens destinationsmappe til den lokale maskines kildemappe.
På samme måde kan du trække en specifik fil ved at nævne den gennem dens fulde sti.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory
For at kopiere flere filer eller mapper fra lokal til fjern, skal du angive stien inden for de krøllede parenteser (adskilt af kommaer) efter 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åde kan du også nævne filer.
Vis live fremskridt under overførsel
Det er en god idé at se live fremskridt for større data backups. Til det skal du bruge -progress-flaget. Føj den til rsync-kommandoen, og du kan se overførselshastigheden, resterende tid og mængden af overførte data.
rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Slet kildefiler, når overførslen er fuldført
Du kan bruge flaget -remove-source-files til at fjerne kildefiler efter den fuldstændige overførsel. Dette kan hjælpe dig i mange scenarier, især når det kommer til at sikre dine filer uden at efterlade spor eller blot bruge dem til at frigøre plads.
rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
rsync tørløb
Rysnc giver dig også mulighed for at evaluere, før du kører et egentligt løb. Tørløbet lader dig se, om du gør det rigtige. Når alt kommer til alt, ønsker du ikke at opdatere filer ved en fejl eller endda slette dem.
Du skal bruge indstillingen –dry-run for at lave en tørløb. Føj det til kommandoen efterfulgt af kilden og destinationen.
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
Outputtet ligner, hvordan vi kørte det før. Du vil dog bemærke en omtale af (DRY RUN) i slutningen af outputtet.
Indstil minimum og maksimum filstørrelse
Rysnc lader dig også indstille minimum eller maksimum filstørrelse under overførsel.
Så hvis du vil overføre med en minimumstørrelse på 15KB, skal du bruge –min-size=15K.
rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Kommandoen kopierer kun filer med en minimum filstørrelse på 15KB. Hvis filstørrelsen er under, vil den ignorere den.
På samme måde kan du bruge flaget –max-size til at indstille den maksimale 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 størrelsen 450K.
Indstil båndbreddegrænse
Hvis du laver andre båndbredde-intensive opgaver, kan du indstille rysnc til at indstille båndbreddegrænsen for overførslen. For at gøre det, brug –bwlimit=KB/s.
rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Her sætter vi båndbredden til 100Kb/s under overførslen.
Afsluttende ord
Dette fører os til slutningen af vores rsync-kommandoguide. Vi lærte at bruge rysnc og dækkede masser af kommandoer effektivt.
Rysnc tilbyder dog meget mere, end hvad vi dækkede. Det er derfor, du måske også ønsker at gå gennem rsync man-siden, hvor alle aspekter af rsync er dækket.
Tjek derefter kommandolinjesnydeark til Windows, Linux og macOS.