Rysnc Guide och 11 exempel för att använda det effektivt

By rik

Utforska Rsync: Ett Kraftfullt Verktyg för Filöverföring och Synkronisering

Rsync är ett kostnadsfritt kommandoradsverktyg som ger dig möjlighet att synkronisera filer både lokalt och via nätverk. Det hanterar effektivt överföring av filer och kataloger.

Detta gör rsync till ett ovärderligt verktyg för dataflyttning, säkerhetskopiering och spegling, vilket gör det perfekt för webbansvariga och administratörer som behöver utföra regelbundna dataöverföringar.

I denna artikel kommer vi att utforska hur rsync fungerar och illustrera dess användning med praktiska exempel.

Hur Fungerar Rsync?

Rsync är ett kommandoverktyg som används för fjärrsynkronisering i Unix-liknande system. Det gör det möjligt för användare att smidigt överföra och synkronisera filer mellan datorer eller olika värdar.

I grunden använder rsync en algoritm för deltaöverföring. Denna algoritm innebär att endast skillnaderna mellan två filer kopieras mellan två platser (källa och destination). Källan och destinationen kan vara antingen lokala eller fjärranslutna. Rsync kan genomföra kopierings- och synkroniseringsuppgifter på två sätt:

  • Genom att använda ssh eller rsh för att kopiera och synkronisera mellan två värdar.
  • Genom att använda en TCP rsync-demon för kopiering och synkronisering.

Eftersom rsync är designat för Unix-liknande system, fungerar det även utmärkt i Linux.

Rsync använder följande steg-för-steg-process:

  • Rsync ansluter till fjärrvärden via SSH och begär lösenord.
  • När anslutningen är upprättad, kommunicerar fjärrvärdens rsync med källan.
  • Dessa program bestämmer sedan vilka filer och kataloger som behöver synkroniseras. De använder en deltaöverföringsalgoritm för att hitta skillnaderna mellan filerna.

Om rsync inte hittar en fil på fjärrvärden men den finns lokalt, kopieras och överförs den till fjärrvärden. För filer som redan finns på båda platserna, kopieras bara skillnaderna (ändrade delar). Filer som är identiska på båda platser ignoreras.

Rsync utför inkrementella uppdateringar genom att spara skillnaderna i en temporär fil innan de skickas till destinationen.

Innan du börjar, se till att:

  • Du har root- eller sudo-behörighet
  • Du har tillgång till terminalen eller kommandoraden
  • Du har SSH-åtkomst för att säkert utföra rsync-kommandon
  • Du har tillgång till två datorer för att genomföra rsync.

I exemplen i den här handledningen kommer vi att använda Linux Mint 21.1 Vera. Du kan utan problem följa samma steg på andra Linux-distributioner.

Varför Välja Rsync Framför Scp?

Scp (secure copy) är ett vanligt kommandoradsprotokoll för filkopiering. Scp kopierar filer linjärt, vilket innebär att den helt enkelt kopierar filerna från källan till destinationen. Scp använder SSH för säkerhet.

Syntaxen för scp-kommandot ser ut så här:

scp option SOURCE DESTINATION

Men varför skulle man välja rsync istället för scp?

Det finns flera fördelar med att använda rsync. Dessa inkluderar:

  • Snabbare utförande: Rsync är snabbare än scp eftersom det använder ett protokoll för fjärruppdateringar. Det gör att den bara överför skillnaderna istället för hela filen. Om du ställer in regelbunden synkronisering behöver du bara göra en fullständig kopia första gången. Därefter kommer rsync endast kopiera de uppdaterade delarna med hjälp av deltaöverföringsalgoritmen.
  • Mindre bandbreddsförbrukning: Eftersom rsync inte behöver kopiera hela filen igen, minskar det bandbreddsförbrukningen. Dessutom används komprimerings- och dekompressionsalgoritmer för att minimera filstorleken under överföringen.
  • Fler kommandoradsalternativ: Rsync erbjuder fler kommandoradsalternativ än scp. Det betyder att du kan finjustera rsync mer.

Sammanfattningsvis är rsync ett utmärkt verktyg för inkrementell synkronisering. Scp är också användbart för att säkert överföra och synkronisera filer. I vardagliga scenarier är scp bra för enkla uppgifter. Men för återkommande överföringar är rsync att föredra.

Rsync Kommandosyntax

Kommandot rsync följer denna syntax:

rsync [OPTION] SOURCE DESTINATION

Termerna definieras nedan:

  • OPTION – Rsyncs alternativ.
  • SOURCE – Källkatalog.
  • DEST – Destinationskatalog.
  • USER – Fjärranvändarnamn
  • HOST – Fjärrvärdnamn eller IP-adress.

Alternativen är parametrar som ger ytterligare funktioner till kommandot. Till exempel kan du synkronisera data rekursivt med alternativet `-r`. Men alternativet `-r` synkroniserar inte ägande för grupper och användare, tidsstämplar, behörigheter eller symboliska länkar. Istället kan du använda alternativet `-a`, som kör kommandot i arkivläge, vilket säkerställer att alla filens äganderätt, behörighet och symboliska länkar behålls vid kopiering.

Andra rsync-alternativ inkluderar:

  • `-z`: komprimera data för att spara utrymme.
  • `-h`: visa utdata i ett läsbart format.
  • `-b`: utför säkerhetskopiering under datasynkroniseringen.
  • `-e`: använd SSH-protokollet för fjärröverföringar.
  • `–progress`: visa framstegen för datasynkroniseringen.
  • `-v`: gör rsync mer utförligt.
  • `–n`: gör en torrkörning för att testa inställningar och synkroniseringskonfigurationer.
  • `-q`: dämpa utdata från rsync-kommandot.

Installera Rsync

De flesta Unix- och Linux-system levereras med rsync förinstallerat. Om ditt system inte har rsync, kan du installera det med följande kommandon.

För Debian, Ubuntu och Mint:

sudo apt-get install rsync

För Arch Linux:

pacman -S rsync

För Gentoo:

emerge sys-apps/rsync

För CentOS, Fedora och REHL:

sudo yum install rsync

För openSUSE:

sudo zypper install rsync

Eftersom vi använder Linux Mint, var rsync förinstallerat. Du kan köra kommandot `rsync` i terminalen för att se om det är installerat. Det kommer att visa dess kapacitet, alternativ och annan viktig information om det finns.

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.

Nu ska vi titta på rsync i praktiken med olika användningsfall.

För denna handledning skapar vi två kataloger:

  • En källkatalog.
  • En destinationskatalog.

Du skapar dessa kataloger genom att skriva följande kommandon:

mkdir source-directory
mkdir dest-directory

Vi behöver också skapa filer för att testa rsync. Vi skapar några testfiler med kommandot nedan:

touch source-directory/file{1..100}

Detta skapar 100 tomma filer i källkatalogen. Du kan bekräfta detta med kommandot nedan:

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

Observera: Destinationskatalogen är tom.

Kopiera Kataloger Lokalt Rekursivt

Även om rsync främst är avsett för att kopiera filer mellan lokala och fjärrservrar, är det lika användbart för att kopiera filer lokalt.

I det här exemplet kommer vi att använda följande rsync-syntax:

rsync [OPTION] SOURCE DESTINATION

Kopiera filerna i vår källkatalog till destinationskatalogen genom att köra följande kommando:

rsync -r source-directory/ dest-directory

Här kopierar kommandot ”rekursivt” filerna från källkatalogen till destinationskatalogen.

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

Detta kopierar varje enskild fil i källkatalogen till destinationskatalogen.

Kopiera En Fil Lokalt

Nu när vi har lärt oss hur man synkroniserar två kataloger, ska vi titta på hur man kopierar en enda fil.

För detta ändamål ska vi redigera den tomma filen `file1` i källkatalogen och sedan synkronisera den med samma fil som finns i destinationskatalogen.

För att redigera en fil, skriv följande kommando:

nano source-directory/file1

Kopiera och klistra in följande text i nano-redigeraren:

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.

Lägga till innehåll i en fil

Stäng nu och spara filen.

Låt oss nu kopiera 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 märker använde vi alternativet `–existing`. Detta uppdaterar befintliga filer. Om du kör kommandot utan `existing`, kommer filen inte att uppdateras, trots att kommandot körs utan problem.

Om den enskilda filen du kopierar inte finns i destinationsmappen, måste du köra följande 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

Kopiera Flera Filer

Om du vill kopiera flera filer, behöver du ange sökvägarna till båda filerna, följt av destinationskatalogen.

För detta ändamål skapar vi två nya filer: `newfile2` och `newfile3` i källkatalogen. Kör följande kommando för att skapa dem:

touch source-directory/newfile{2..3}

Använd nu följande kommando för att synkronisera flera 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
$

Kopiera Fil Eller Katalog Från Lokal Till Fjärr

Rsync-syntaxen för att kopiera från lokalt till fjärrsystem är följande:

rsync [OPTION] SOURCE [email protected]:DEST

Som du ser behöver du IP-adressen till fjärrdatorn. Du lägger till IP-adressen efter källfilen.

rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Innan överföringen startar, kommer den att fråga efter lösenordet. Ange det för att fortsätta. Om användaren är en annan på fjärrdatorn, behöver du ange det före IP-adressen, med ett `@` mellan.

rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory

Om du vill kopiera flera filer eller kataloger, behöver du lista sökvägarna till filerna eller katalogerna. Syntaxen för detta är nedan:

rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Fjärröverföringsspecifika Protokoll

Rsync låter dig ange specifika protokoll för filöverföring. För att göra det, använd alternativet `-e` följt av protokollet.

Om du till exempel vill använda SSH-protokollet, behöver du lägga till `-e ssh` till rsync-kommandot:

rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Kopiera En Fil Eller Katalog Från Fjärr Till Lokal

Rsync-syntaxen för att kopiera från fjärr till lokal är följande:

rsync [OPTION] [email protected]:SRC DEST

Detta fungerar som en ”pull”-förfrågan. För att hämta filerna/katalogerna från en fjärrserver till din lokala dator, behöver du köra följande kommando:

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Kommandot hämtar filerna i fjärrdatorns destinationskatalog till den lokala datorns källkatalog.

På samma sätt kan du hämta en specifik fil genom att ange dess fullständiga sökväg:

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory

För att kopiera flera filer eller kataloger från lokalt till fjärrsystem, behöver du ange sökvägarna inom parenteser (separerade med kommatecken) efter serverns IP-adress:

rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory

Du kan på samma sätt ange filer.

Visa Live-Framsteg Under Överföring

Det är bra att se live-framsteg för större säkerhetskopieringar av data. För att göra det, använd flaggan `–progress`. Lägg till det till rsync-kommandot för att se överföringshastigheten, återstående tid och mängden överförd data:

rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Ta Bort Källfiler Efter Överföring

Du kan använda flaggan `–remove-source-files` för att ta bort källfiler efter en lyckad överföring. Detta kan hjälpa dig i många fall, speciellt när det handlar om att skydda dina filer utan att lämna några spår, eller för att frigöra utrymme.

rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Rsync Torrkörning

Rsync låter dig även utvärdera vad som kommer att hända innan du kör en riktig operation. En torrkörning ger dig möjlighet att se om du har rätt inställningar. Det är viktigt att undvika att uppdatera filer av misstag, eller ta bort dem.

Använd alternativet `–dry-run` för att utföra en torrkörning. Lägg till det i kommandot, följt av källan och 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

Resultatet liknar det vi fick tidigare. Du kommer dock se att det står (DRY RUN) i slutet av utskriften.

Ange Minsta Och Maximal Filstorlek

Rsync låter dig även ställa in minsta och maximala filstorlekar under överföring.

Om du till exempel vill överföra filer med en minsta storlek på 15 KB, använd `–min-size=15k`.

rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Kommandot kopierar endast filer med en minsta filstorlek på 15 KB. Om filstorleken är mindre, kommer filen ignoreras.

Du kan också använda flaggan `–max-size` för att ange den maximala filstorleken:

rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

I det här fallet ignorerar rsync filer över 450 KB.

Ställ In Bandbreddsgräns

Om du utför andra bandbreddskrävande uppgifter, kan du ställa in rsync för att begränsa överföringens bandbredd. För att göra det, använd `–bwlimit=KB/s`.

rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Här ställer vi in bandbredden till 100 KB/s under överföringen.

Sammanfattning

Detta avslutar vår guide till rsync-kommandot. Vi har lärt oss hur man använder rsync och undersökt en rad effektiva kommandon.

Rsync erbjuder dock mycket mer än vad vi har täckt. Därför rekommenderas det att studera rsync-manualsidan, där alla aspekter av rsync diskuteras.

Kolla också in kommando-fusklapparna för Windows, Linux och macOS.