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.