rsync eller fjärrsynkronisering är ett programvaruverktyg för Unix-liknande system som effektivt synkroniserar filer och kataloger mellan två värdar eller maskiner. Den ena är källan eller den lokala värd som filerna kommer att synkroniseras från, den andra är fjärrvärden, på vilken synkronisering kommer att ske. Det finns i princip två sätt rsync kan kopiera/synkronisera data:
- Kopiera/synkronisera till/från en annan värd över valfritt fjärrskal som ssh , rsh .
- Kopiera/synkronisera genom rsync-demonen med TCP.
Rsync är känt för sitt delta-överföringsalgoritm , där den bara kopierar skillnaderna mellan källfilerna som finns i den lokala värden och de befintliga filerna på destinationen eller fjärrvärden.
Exempel:
rsync local-file user@remote-host:remote-file>
Vad händer här:
Rsync kommer först att använda SSH för att ansluta somuser>till fjärrvärd och kommer att be omuser's>Lösenord. När den väl är ansluten kommer den att anropa fjärrvärdens rsync, och sedan kommer de två programmen att avgöra vilka delar av den lokala filen som måste kopieras så att fjärrfilen matchar den lokala. Observera följande beteende hos rsync:
- Filer som inte finns på fjärrvärden kopieras.
- Filer som har uppdaterats kommer att synkroniseras, rsync kopierar endast de ändrade delarna av filerna till fjärrvärden.
- filer som är exakt lika kopieras inte till fjärrvärden.
Syntax för kommandot `rsync` i Linux
rsync [options] source [destination]>
Alternativ tillgängligt i kommandot `rsync` i Linux
| alternativ | Beskrivning |
|---|---|
| a, –arkiv | Detta motsvarar att använda -rlptgoD . Arkivläget innehåller alla nödvändiga alternativ som att kopiera filer rekursivt, bevara nästan allt (som symboliska länkar, filbehörigheter, användar- och gruppägande och tidsstämplar). |
| -v, –verbose | Som standard fungerar rsync tyst. Att använda ett enda -v-alternativ ger information om överförda filer och en sammanfattning i slutet. Att lägga till två -v-alternativ ger statusuppdateringar om delta-överföring och överhoppade filer, tillsammans med mer information i slutet. Flera -v-alternativ används vanligtvis för att felsöka rsync. |
| -h, -läsbart format för människor | Utgångar i ett mänskligt läsbart format. hur man byter namn på en katalog linux |
| -z, –komprimera | Komprimera fildata under överföringen |
Exempel
Använder `rsync` som ett listkommando
Om endast källsökvägen anges listas innehållet i källan i ett utdataformat som liknarls -l>.
rsync foo/>
Kommandot ovan kommer att lista de filer och kataloger som finns i katalogen foo .
Produktion:
Kopiera/synkronisera filer och katalog lokalt
Om varken käll- eller destinationssökvägen anger en fjärrvärd, fungerar rsync-kommandona som ett kopieringskommando.
rsync -avh foo/ bar/>
Ovanstående kommando kommer att kopiera/synkronisera alla filer och kataloger som finns i katalogenfoo>till katalogen bar . Om målkatalogen inte finns (härbar>), skapar rsync automatiskt en och kopierar all data i den.
Produktion:
Rsync med ssh
Det finns två olika sätt för rsync att kontakta ett fjärrsystem:
- Använda ett fjärrskalprogram som transport (t.ex
ssh>(Secure Shell) ellerrsh>(Fjärrskal)). - Kontakta en rsync-demon direkt via TCP.
Här kommer vi att diskutera rsync över ssh.
rsync -avhze ssh /foo user@remote-host:/tmp/>
För att ange vilken typ av protokoll som ska användas,-e>alternativet används.
Produktion:
Rsync med särskilda filbehörigheter
Om vi vill synkronisera filer till den lokala eller fjärrvärden med behörigheterna för filerna som ändras. Följande kommando måste användas.
rsync -avhe ssh --chown=USER:GROUP /foo user@remote-host:/tmp/>
Ovanstående kommando kommer att synkronisera alla filer som finns i katalogen /foo med filerna som finns i katalogen /tmp iremote-host>med alla filer som ägs av USER med gruppen GROUP.
Produktion:
Notera: Deuser>ochgroup>måste redan skapas i fjärrvärden.
Rsync med --ignore-existing-files>
Vi kan också hoppa över de redan befintliga filerna på destinationen. Detta kan i allmänhet användas när vi gör säkerhetskopior med hjälp av –länk-dest alternativet, medan du fortsätter en säkerhetskopiering som avbröts.
rsync --ignore-existing -avhe /foo user@remote-host:/tmp/>
Så alla filer som inte finns på destinationen kommer att kopieras över. Här har jag tagit bortgeeksforgeeks>mapp från katalogenfoo>, så den ska bara kopierageeksforgeeks>katalog.
Notera: Detta ignorerar inte befintliga kataloger, annars kommer ingenting att göras. Även om det finns några ändringar i en fil i den lokala värden, skulle den fortfarande inte synkroniseras om den finns på fjärrvärden.
Produktion:
Visa framsteg under överföringen
För att visa framstegen under överföring av data från lokal värd till fjärrvärd kan vi använda-–progress>alternativ.
rsync -avhe ssh --progress /foo user@remote-host:/tmp/>
När överföringen är klar för en viss fil matar rsync ut en sammanfattningsrad som visas nedan.
Produktion:
I bilden ovan, om vi tittar på filen/foo/file2>, det säger oss det
- Filen var totalt 44 byte lång.
- Den genomsnittliga överföringshastigheten för hela filen var 42,97 kilobyte per sekund under de 0:00:00 sekunder som det tog att slutföra.
- Det var den andra överföringen under strömmen rsync session.
- Det finns ytterligare 10 filer för fjärrvärden att kontrollera (för att se om de är uppdaterade eller inte) kvar av de totalt 13 filerna i fillistan.
Om vi vill kopiera filer över fjärrvärden som har uppdaterats mer nyligen på det lokala filsystemet. Det är gjort med -uppdatering flagga. Beteendet är nu så här:
- Filer som inte finns på fjärrvärden kopieras.
- Filer som finns på både lokal och fjärransluten men har en nyare tidsstämpel på lokalvärden kopieras till fjärrvärd. (Omvänt kopieras inte filer som har en äldre tidsstämpel).
Här har jag gjort några ändringar fil1 och fil 2 , men förändringarna i fil 2 gjordes nyligen. Så bara fil 2 kommer att synkroniseras.
rsync -avhe ssh --progress --update /foo root@remote-host:/tmp/>
Produktion: 
Ta bort filer automatiskt från lokal värd efter lyckad överföring
Anta nu att vi har en webbserver och en backupserver och vi skapade en daglig backup och synkroniserade den med vår backupserver och då vill vi inte behålla den lokala kopian av backupen i vår webbserver. Så istället för att ta bort det manuellt efter en lyckad överföring kan vi använda--remove-source-files>flagga för att automatiskt radera filerna från webbservern.
rsync -avhe ssh --remove-source-files /foo user@backup-server:/tmp>
Produktion:
Notera: Detta tar bara bort filerna och inte katalogerna.
Ta bort filerna som har tagits bort på den lokala värden
Om det finns några filer som raderas på den lokala värden och vi vill att de också ska uppdateras på fjärrvärden, måste vi använda--delete>alternativ.
rsync -avhe ssh /foo --delete user@remote-host:/tmp/>
Produktion:
Så här fil1 , fil 2 , fil 3 togs bort på den lokala värden, och som kan ses uppdateras de också i fjärrvärden.
Obs: ` rsync` tar inte bort filerna automatiskt för att synkronisera katalogerna som finns på båda sidor.
Utföra en torrkörning med `rsync`
En torrkörning gör att 'rsync' utför en testkörning som inte gör några ändringar och visar nästan samma utdata som en riktig körning skulle göra. Det används vanligtvis med alternativen -v, -verbose och/eller -i, -itemize-changes för att se vad ett `rsync`-kommando skulle göra innan man faktiskt kör det.
rsync -avhe ssh --dry-run --chown=USER:GROUP /foo user@remote-host:/>
Produktion:
Slutsats
I den här artikeln diskuterade vi kommandot rsync i Linux som är ett mångsidigt och kraftfullt verktyg för att synkronisera filer och kataloger mellan värdar eller maskiner. Med sin delta-överföringsalgoritm och olika alternativ erbjuder den effektiv datasynkronisering, säkerhetskopieringsmöjligheter och filöverföringshantering. Genom att behärska kommandot rsync kan Linux-användare säkerställa filkonsistens, optimera dataöverföring och effektivisera sina arbetsflöden för datahantering.