Användning av rsync-kommando för att synkronisera filer och kataloger [11 Examples]

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.

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.