rsync är ett gratis att använda kommandoradsverktyg som låter dig synkronisera filer lokalt och på distans. Med den kan du överföra filer och kataloger.
Detta gör den mycket användbar för att migrera data, utföra säkerhetskopior och spegling, vilket gör den perfekt för webbansvariga och administratörer för återkommande dataöverföringsuppgifter.
Den här artikeln kommer att lära oss hur Rysnc fungerar och ge några användbara exempel.
Innehållsförteckning
Hur fungerar rsync?
rsync är ett kommandoradsverktyg för fjärrsynkronisering för Unix-liknande system. Det ger användaren möjlighet att överföra/synkronisera filer mellan maskiner eller två värdar sömlöst.
Under huven använder rsync delta-överföringsalgoritmen. Denna algoritm innebär att skillnader mellan de två filerna kopieras över två värdar (källa och destination). Källan och destinationen kan vara lokal eller fjärransluten. Kommandot rsync kan utföra kopierings-/synkroniseringsuppgifter på två sätt. Dessa är:
- Använd ssh, rsh för att kopiera/synkronisera mellan två värdar.
- Använd TCP rsync daemon för kopiering/synkronisering.
Eftersom den är designad för att fungera i Unix-liknande system, fungerar den även i Linux.
Steg-för-steg-processen rsync använder följande:
- Rsync använder SSH för att ansluta till fjärrvärden och ber om ett lösenord.
- När den är ansluten kommunicerar fjärrvärdens rsync med källan.
- Dessa program kommer sedan att avgöra vilka filer och kataloger som behöver synkroniseras. Den använder en delta-överföringsalgoritm för att kontrollera skillnaden mellan filerna.
Om kommandot rsync inte hittar en fil på fjärrkontrollen men inte på värden, kommer den att kopiera och överföra den till värdsystemet. På samma sätt, för redan befintliga filer (både på värd och fjärr), kopierar den skillnaden mellan dem (dvs ändrade delar). Slutligen kommer det att ignorera befintliga filer på båda systemen utan några ändringar.
Kommandot rsync uppnår inkrementella uppdateringar genom att lagra skillnaden i en temporär fil innan den skickas till destinationen.
Innan du börjar:
- Du måste ha root- eller sudo-privilegier
- Ha tillgång till terminalen/kommandoraden
- SSH-åtkomst för säker körning av rsync-kommandon
- Du behöver också två maskiner för att göra rsync.
För handledningen kommer vi att använda Linux Mint 21.1 Vera. Du kan enkelt följa guiden utan problem med någon annan Linux-distro.
Varför använda rsync Over Scp?
Scp (säker kopia) är ett populärt kommandoradsprotokoll som låter användare kopiera filer. Den följer en linjär metod för att kopiera. Detta innebär att det helt enkelt kopierar filerna från källa till destination. För att göra det säkert använder den SSH.
Syntaxen för scp-kommandot är enligt nedan:
scp option SOURCE DESTINATION
Men frågan kvarstår, varför använda rsync över scp?
Tja, det finns flera fördelar med att använda rsync. Dessa förmåner inkluderar:
- Snabbare exekvering: rsync är snabbare än scp eftersom det använder ett fjärruppdateringsprotokoll. Detta gör att den bara kan överföra skillnader snarare än hela filen. Så om du ställer in en vanlig synkronisering över tid behöver du bara göra en fullständig kopia första gången. Från och med nästa gång kopierar den bara de uppdaterade delarna med hjälp av delta-överföringsalgoritmen.
- Mindre bandbreddsförbrukning: Eftersom rsync inte behöver kopiera hela filen igen, leder det till mindre bandbreddsförbrukning. Dessutom använder den också komprimerings-/dekompressionsalgoritmer för att minimera filstorleken under överföringen.
- Fler kommandoradsalternativ: rsync slår också scp i antalet kommandoradsalternativ. Det betyder att du kan finjustera rsync mer än scp.
Sammanfattningsvis är rsync ett utmärkt verktyg för inkrementell synkronisering. Scp-verktyget är också användbart för att säkert överföra/synkronisera filer. I ett verkligt scenario är scp lämplig för dagliga uppgifter om du letar efter ett mer okomplicerat tillvägagångssätt. Men för återkommande uppgifter, använd rsync.
rsync kommandosyntax
Kommandot rsync är enligt nedan:
Här definieras termerna nedan:
- OPTION – Det här är rsync-alternativen
- SOURCE – Källkatalog
- DEST – Destinationskatalog
- USER – Fjärranvändarnamn
- HOST – Fjärrvärdnamn eller IP-adress
Alternativen är parametrar som erbjuder ytterligare funktionalitet 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: ger läsbar formatutdata
- -b: utför säkerhetskopiering under datasynkroniseringsprocessen
- -e: använd SSH-protokoll för fjärrdataöverföringar
- -progress: visa datasynkroniseringens framsteg
- -v: be rsync att visa utförlig utdata
- –n: utför en torrkörning för att testa inställningar och inställningar för datasynkronisering
- -q: dämpa rsync-kommandotutdata och alternativ
Installerar rsync
De flesta Unix- och Linux-system kommer med rsync installerat. Om ditt system inte har rsync kan du installera det med följande kommando(n).
För Debian/Ubuntu och Mint
sudo apt-get install rsync
För 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
Eftersom vi har Linux Mint kom rsync förinstallerat. Så du kan köra kommandot rsync i terminalen för att se om det är installerat. Den kommer att förklara dess möjligheter, alternativ och annan viktig information om den 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.
Låt oss nu se rsync i aktion med olika användningsfall.
För handledningen kommer vi att göra två kataloger.
- källkatalog
- dest-katalog
För det måste du skriva följande kommandon.
mkdir source-directory mkdir dest-directory
Vi måste också generera filer för att få rsync att fungera. Så låt oss skapa några testfiler med kommandot nedan.
touch source-directory/file{1..100}
Detta skapar 100 tomma filer i källkatalogen. Du kan bekräfta det genom att ange 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
Obs: Vi har hållit dest-katalogen tom.
Kopiera kataloger lokalt rekursivt
Även om rsync främst syftar till att kopiera filer mellan en lokal och fjärrserver, är det lika användbart för att kopiera filer lokalt.
I det här fallet kommer vi att använda följande rsync-syntax.
rsync-alternativet KÄLLDESTINATION
Kopiera filerna i vår källkatalog till målkatalogen genom att köra följande kommando.
rsync -r source-directory/ dest-directory
Här kopierar kommandot ”rekursivt” filerna från källkatalogen till 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
Detta kopierar varje enskild fil i källkatalogen till dest-katalogen.
Kopiera en fil lokalt
Nu när vi har lärt oss hur man synkroniserar två kataloger kommer vi att lära oss hur man kopierar en enda fil.
För detta ändamål kommer vi att redigera den tomma filen fil1 i källkatalogen och sedan synkronisera den med samma fil som finns i målkatalogen.
För att redigera en fil, skriv följande kommando.
nano source-directory/file1
Kopiera och klistra in följande text i nanoredigeraren.
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 kanske har märkt använde vi –befintligt alternativ. Detta uppdaterar de befintliga filerna. Om du kör kommandot utan att existera, kommer det inte att uppdateras, även om det körs framgångsrikt.
Om den enskilda filen du kopierar inte finns i målmappen, 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 tänker kopiera flera filer måste du nämna båda filernas källsökvägar, följt av målkatalogen.
För detta ändamål kommer vi att skapa två nya filer: nyfil2 och nyfil3, i källkatalogen. Kör följande kommando för att göra det.
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ärrkontroll
rsync-syntaxen för lokal till fjärröverföring är enligt nedan.
rsync option SOURCE [email protected]:DEST
Som du kan se måste du känna till IP-adressen för fjärrmaskinen för att detta ska fungera. Du måste också lägga 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 påbörjas kommer den att fråga efter lösenordet. Ange den för att fortsätta. Dessutom, om användaren är annorlunda i fjärrmaskinen, måste du nämna det före IP-adressen följt av @.
rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory
Om du tänker kopiera flera filer eller kataloger, måste du lista filerna eller katalogsökvägarna. Syntaxen för det ä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 filöverföringsprotokoll. För att göra det måste du använda alternativet -e, följt av protokollet.
Om du till exempel vill använda ssh-protokollet måste du lägga till -e ssh till kommandot rsync.
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 lokal till fjärröverföring är enligt nedan.
sync option [email protected]:SRC DEST
Detta fungerar som en pull-begäran. Så för att få de nödvändiga filerna/katalogen från en fjärrserver till din lokala dator måste du köra följande kommando.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Kommandot drar filerna i fjärrmaskinens målkatalog till den lokala maskinens källkatalog.
På samma sätt kan du dra en specifik fil genom att nämna den genom 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 lokal till fjärr, måste du ange sökvägen inom parenteser (avgränsade 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
På samma sätt kan du nämna filer också.
Visa liveframsteg under överföring
Det är en bra idé att se liveframsteg för större säkerhetskopior av data. För det måste du använda flaggan –progress. Lägg till det till kommandot rsync så kan du 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 när överföringen är klar
Du kan använda flaggan -remove-source-files för att ta bort källfiler efter den fullständiga överföringen. Detta kan hjälpa dig i många scenarier, särskilt när det gäller att säkra dina filer utan att lämna några spår eller helt enkelt använda dem 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
Rysnc låter dig också utvärdera innan du kör en riktig körning. Torrkörningen låter dig se om du gör rätt. När allt kommer omkring vill du inte uppdatera filer av misstag eller ens ta bort dem.
Du måste använda alternativet –torrkörning för att gö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
Utgången liknar hur vi körde den tidigare. Du kommer dock att märka ett omnämnande av (DRY RUN) i slutet av utgången.
Ställ in minsta och maximala filstorlek
Rysnc låter dig också ställa in minsta eller maximala filstorlek under överföring.
Så om du vill överföra med en minsta storlek på 15KB, måste du använda –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å 15KB. Om filstorleken är lägre kommer den att ignorera den.
På samma sätt kan du använda flaggan –max-size för att ställa in den maximala filstorleken.
rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Här kommer rsync att ignorera filer över storleken 450K.
Ställ in bandbreddsgräns
Om du gör andra bandbreddskrävande uppgifter kan du ställa in rysnc för att ställa in bandbreddsgränsen för överföringen. 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 100Kb/s under överföringen.
Slutord
Detta leder oss till slutet av vår rsync-kommandoguide. Vi lärde oss hur man använder rysnc och täckte massor av kommandon effektivt.
Rysnc erbjuder dock mycket mer än vad vi täckte. Det är därför du kanske också vill gå igenom rsync man-sidan, där alla aspekter av rsync tas upp.
Kolla sedan in kommandoradens fuskblad för Windows, Linux och macOS.