Utforska rsync: Ett Kraftfullt Verktyg för Filsynkronisering
rsync är ett kostnadsfritt kommandoradsverktyg som möjliggör synkronisering av filer, både lokalt och över nätverk. Det hanterar överföring av enskilda filer såväl som kompletta katalogstrukturer.
Denna funktion gör rsync oerhört värdefullt för en rad uppgifter, som datamigrering, regelbunden säkerhetskopiering och serverspegling. Detta gör det till ett oumbärligt verktyg för webbansvariga och systemadministratörer som arbetar med återkommande dataöverföringar.
I denna artikel ska vi undersöka hur rsync fungerar och demonstrera några praktiska exempel på dess användning.
Hur fungerar rsync?
rsync är ett kommandoradsverktyg avsett för fjärrsynkronisering på Unix-liknande system. Det ger användare möjlighet att smidigt överföra och synkronisera filer mellan olika datorer eller värdar.
Tekniskt sett använder rsync en algoritm för deltaöverföring. Detta innebär att endast skillnaderna mellan filer kopieras mellan käll- och destinationsplatser. Dessa platser kan vara antingen lokala eller fjärranslutna. rsync kan utföra kopierings- och synkroniseringsoperationer på två sätt:
- Genom att använda SSH eller RSH för att kopiera eller synkronisera mellan två värdar.
- Genom att använda TCP rsync-daemon för kopiering eller synkronisering.
Eftersom rsync är utformat för att fungera på Unix-liknande system, är det fullt kompatibelt med Linux.
rsync fungerar stegvis genom följande process:
- rsync etablerar en SSH-anslutning till fjärrvärden och begär lösenord.
- När anslutningen är upprättad kommunicerar fjärrvärdens rsync-instans med källan.
- De två instanserna bestämmer vilka filer och kataloger som behöver synkroniseras, med hjälp av en algoritm för deltaöverföring för att identifiera skillnader mellan filer.
Om rsync inte hittar en fil på fjärrvärden som finns på källvärden, kopieras och överförs den till värdsystemet. Om en fil finns på båda ställena, kopieras endast de ändrade delarna (skillnaderna). Oförändrade filer på båda systemen ignoreras.
rsync genomför inkrementella uppdateringar genom att temporärt lagra skillnaderna innan de skickas till destinationen.
Innan du börjar bör du säkerställa att:
- Du har root- eller sudo-privilegier.
- Du har tillgång till en terminal eller kommandorad.
- Du har SSH-åtkomst för att köra rsync-kommandon säkert.
- Du har tillgång till minst två datorer eller enheter.
I denna guide kommer vi att använda Linux Mint 21.1 Vera. Guiden fungerar dock lika bra med andra Linux-distributioner.
Varför välja rsync istället för scp?
scp (secure copy) är ett välkänt kommandoradsprotokoll för filkopiering. Det använder en linjär metod för att kopiera filer från källan till destinationen. För att säkerställa säkerheten, krypteras data med SSH.
Syntaxen för scp-kommandot är som följer:
scp [alternativ] KÄLLA DESTINATION
En relevant fråga är varför man ska använda rsync istället för scp?
rsync erbjuder flera fördelar. De huvudsakliga fördelarna är:
- Snabbare exekvering: rsync är snabbare än scp eftersom det använder ett protokoll för fjärruppdatering. Detta innebär att rsync endast överför skillnaderna snarare än hela filen. För återkommande synkroniseringar gör rsync en fullständig kopia första gången och därefter överförs enbart de uppdaterade delarna.
- Mindre bandbreddsanvändning: Eftersom rsync inte behöver kopiera hela filen igen, minskar det bandbreddsförbrukningen. rsync komprimerar och dekomprimerar även filerna under överföring, vilket ytterligare minskar filstorleken.
- Fler kommandoradsalternativ: rsync har fler kommandoradsalternativ än scp, vilket gör att du kan finjustera rsync mer.
Sammanfattningsvis är rsync ett utmärkt verktyg för inkrementell synkronisering. Scp är användbart för att överföra och synkronisera filer på ett säkert sätt. Scp kan användas för dagliga uppgifter där enklare metoder behövs, medan rsync är att föredra för återkommande uppgifter.
Syntax för rsync-kommandon
Grundsyntaxen för rsync-kommandot är:
rsync [ALTERNATIV] [KÄLLA] [DESTINATION]
Begreppen förklaras nedan:
- OPTION – rsync-alternativ.
- SOURCE – Källkatalog.
- DEST – Destinationskatalog.
- USER – Fjärranvändarnamn.
- HOST – Fjärrvärdnamn eller IP-adress.
Alternativen är parametrar som ger kommandot ytterligare funktionalitet. 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 all filägande, behörighet och symboliska länkar bibehålls vid kopiering.
Andra vanliga rsync-alternativ:
- -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 framsteg i datasynkroniseringen.
- -v: Ge detaljerade utdata från rsync.
- -n: Utför en testkörning för att verifiera synkroniseringsinställningar.
- -q: Dämpa utdata från rsync-kommandot och dess alternativ.
Installation av rsync
De flesta Unix- och Linux-system har rsync förinstallerat. 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 använder Linux Mint är rsync redan förinstallerat. Du kan verifiera installationen genom att skriva rsync i terminalen. Om den är installerad, kommer du att se dess funktioner, alternativ och annan relevant information.
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 utforska rsync i praktiken med olika exempel.
För denna handledning kommer vi att skapa två kataloger:
- källkatalog
- målkatalog
För att göra detta, använd följande kommandon:
mkdir source-directory mkdir dest-directory
Vi behöver också filer för att rsync ska kunna fungera. Låt oss skapa några testfiler med följande kommando:
touch source-directory/file{1..100}
Detta skapar 100 tomma filer i källkatalogen. Du kan bekräfta detta genom att köra följande kommando:
ls source-directory
Observera att målkatalogen är tom.
Lokal Rekursiv Kopiering av Kataloger
Även om rsync främst används för att kopiera filer mellan en lokal och en fjärrserver, är det lika användbart för att kopiera filer lokalt.
I detta fall använder vi följande rsync-syntax:
rsync [alternativ] KÄLLA DESTINATION
Kopiera filerna från vår källkatalog till målkatalogen genom att köra:
rsync -r source-directory/ dest-directory
Här kopierar kommandot rekursivt filer från källkatalogen till målkatalogen.
Detta kopierar alla filer i källkatalogen till målkatalogen.
Lokal Kopiering av en Fil
Nu när vi har lärt oss att synkronisera två kataloger, ska vi lära oss att kopiera en enda fil.
Vi redigerar den tomma filen file1 i källkatalogen och sedan synkroniserar vi den med samma fil i målkatalogen.
För att redigera filen, kör följande kommando:
nano source-directory/file1
Kopiera och klistra in följande text i nanoredigeraren:
Vi uppdaterar fil1 i källkatalogen. När vi uppdaterat skickar vi de nya uppdateringarna till målkatalogen. rsync behöver inte kopiera om hela filen med hjälp av algortimen för deltaöverföring. Denna algoritm kontrollerar skillnaderna och uppdaterar sedan filerna i destinationen. Så när du väl sparat fil1 i källkatalogen öppnar du fil1 i målkatalogen. Den kommer vara tom. Men om vi kollar efter att rsync har körts, kommer du se att fil1 i målkatalogen är uppdaterad.
Spara filen.
Låt oss kopiera filen med rsync:
sudo rsync -v --existing source-directory/file1 dest-directory
Som du kanske har noterat använde vi alternativet –existing. Detta uppdaterar de befintliga filerna. Utan detta alternativ uppdateras inte filen även om kommandot körs utan fel.
Om den fil du vill kopiera inte finns i målmappen, måste du använda följande kommando:
rsync -v source-directory/newfile dest-directory
Kopiera flera Filer
För att kopiera flera filer, anger du alla filernas källsökvägar och sedan målkatalogen.
Vi kommer att skapa två nya filer, newfile2 och newfile3, i källkatalogen. Använd följande kommando:
touch source-directory/newfile{2..3}
Nu, synkronisera flera filer med:
rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
Kopiera Fil eller Katalog från Lokalt till Fjärrsystem
rsync-syntaxen för lokal till fjärröverföring:
rsync [alternativ] KÄLLA [email protected]:DEST
Du behöver IP-adressen för fjärrsystemet. Du måste 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 programmet att fråga efter lösenordet. Ange det för att fortsätta. 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 vill kopiera flera filer eller kataloger måste du lista filerna eller katalogsökvägarna. Syntaxen för det är:
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öring med Specifika Protokoll
rsync låter dig ange specifika filöverföringsprotokoll. Använd alternativet -e, följt av protokollet.
Om du vill använda SSH-protokollet, lägg till -e ssh till rsync-kommandot:
rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Kopiera Fil eller Katalog från Fjärrsystem till Lokalt System
rsync-syntaxen för att kopiera från fjärr till lokal:
rsync [alternativ] [email protected]:SRC DEST
Detta fungerar som en pull-begäran. För att hämta filer eller kataloger från en fjärrserver till din lokala dator, kör följande kommando:
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Kommandot hämtar filerna från fjärrmaskinens målkatalog till den lokala maskinens 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 fjärr till lokal, ange sökvägen inom klammerparentes (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
På samma sätt kan du ange filer.
Visa Liveframsteg Under Överföring
Det är bra att se liveframstegen vid större säkerhetskopieringar. Använd flaggan –progress. Lägg till den i rsync-kommandot 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 efter Överföring
Använd flaggan –remove-source-files för att ta bort källfiler efter fullständig överföring. Detta kan vara hjälpsamt för att säkra dina filer, eller frigöra utrymme.
rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
rsync Testkörning
Med rsync kan du testa kommandot innan du kör det på riktigt. Testkörningen hjälper dig att se om du gör rätt. Du vill inte råka uppdatera eller ta bort filer av misstag.
Använd alternativet –dry-run för att göra en testkörning. Lägg till det i kommandot, följt av källan och destinationen.
sudo rsync -v --dry-run source-directory/file1 dest-directory
Utdata liknar det som tidigare. Du kommer dock se ett omnämnande av (DRY RUN) i slutet.
Ställa In Minsta och Maximala Filstorlek
rsync låter dig även ställa in minsta eller maximala filstorlek under överföring.
För att ö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. Filer med mindre storlek ignoreras.
På samma sätt använder du 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
rsync ignorerar filer som är större än 450 KB.
Begränsa Bandbredd
Om du utför andra bandbreddskrävande uppgifter kan du ställa in en gräns för bandbredden under rsync-överföringen. 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.
Avslutande Ord
Detta avslutar vår guide till rsync-kommandon. Vi har lärt oss att använda rsync och gått igenom många kommandon.
rsync erbjuder många fler funktioner än de som vi har gått igenom. Vi rekommenderar därför att du läser rsync man-sidan, där alla aspekter av rsync tas upp.
Du kan också kolla in kommandorads-fuskblad för Windows, Linux och macOS.