Brug af rsync-kommando til at synkronisere filer og mapper [11 Examples]

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.

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.

  Sådan får du adgang til tilgængelighedskontrol fra menulinjen og kontrolcenteret på Mac

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.

  8 værktøjer til nemt at kombinere videoer på iPhone

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.

  Hvor sikre er adgangskodeadministratorer?

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.