Indledning
Rsync, som står for “remote sync”, er et værktøj til ekstern og lokal filsynkronisering. Det bruger en algoritme, der minimerer mængden af data, der kopieres, ved kun at flytte de dele af filer, der er ændret.
I denne vejledning vil vi dække den grundlæggende brug af dette kraftfulde værktøj.
Hvad er Rsync?
Rsync er et meget fleksibelt netværksaktiveret synkroniseringsværktøj. På grund af dets allestedsnærværelse på Linux og Unix-lignende systemer og dets popularitet som et værktøj til systemskripter, er det som standard inkluderet i de fleste Linux-distributioner.
Grundlæggende syntaks
Den grundlæggende syntaks for rsync
er meget ligetil og fungerer på en måde, der svarer til ssh, scp og cp.
Vi vil oprette to testmapper og nogle testfiler med følgende kommandoer:
- cd ~
- mkdir dir1
- mkdir dir2
- touch dir1/file{1..100}
Vi har nu en mappe kaldet dir1
med 100 tomme filer i den.
- ls dir1
Outputfile1 file18 file27 file36 file45 file54 file63 file72 file81 file90file10 file19 file28 file37 file46 file55 file64 file73 file82 file91file100 file2 file29 file38 file47 file56 file65 file74 file83 file92file11 file20 file3 file39 file48 file57 file66 file75 file84 file93file12 file21 file30 file4 file49 file58 file67 file76 file85 file94file13 file22 file31 file40 file5 file59 file68 file77 file86 file95file14 file23 file32 file41 file50 file6 file69 file78 file87 file96file15 file24 file33 file42 file51 file60 file7 file79 file88 file97file16 file25 file34 file43 file52 file61 file70 file8 file89 file98file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Vi har også en tom mappe kaldet dir2
.
For at synkronisere indholdet af dir1
til dir2
på det samme system skal du skrive:
- rsync -r dir1/ dir2
Optionen -r
betyder rekursiv, hvilket er nødvendigt for mappesynkronisering.
Vi kunne også bruge -a
-flaget i stedet:
- rsync -a dir1/ dir2
Muligheden -a
er et kombinationsflag. Det står for “archive” og synkroniserer rekursivt og bevarer symbolske links, specielle filer og enhedsfiler, ændringstider, gruppe, ejer og tilladelser. Den er mere almindeligt anvendt end -r
og er normalt den, du ønsker at bruge.
En vigtig bemærkning
Du har måske bemærket, at der er en afsluttende skråstreg (/
) i slutningen af det første argument i ovenstående kommandoer:
- rsync -a dir1/ dir2
Det er nødvendigt for at betyde “indholdet af dir1
“. Alternativet, uden den afsluttende skråstreg, ville placere dir1
, inklusive mappen, inden for dir2
. Dette ville skabe et hierarki, der ser således ud:
- ~/dir2/dir1/
- ~/dir2/dir1/
Du skal altid dobbelttjekke dine argumenter, før du udfører en rsync-kommando. Rsync tilbyder en metode til at gøre dette ved at overdrage indstillingerne -n
eller --dry-run
. Flaget -v
(for verbose) er også nødvendigt for at få det korrekte output:
- rsync -anv dir1/ dir2
Outputsending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .
Sammenlign dette output med det output, vi får, når vi fjerner den afsluttende skråstreg:
- rsync -anv dir1 dir2
Outputsending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .
Du kan se her, at selve mappen overføres.
Sådan bruger du Rsync til at synkronisere med et fjernsystem
Synkronisering til et fjernsystem er trivielt, hvis du har SSH-adgang til fjernmaskinen og rsync
installeret på begge sider. Når du har fået bekræftet SSH-adgang mellem de to maskiner, kan du synkronisere mappen dir1
fra tidligere til en fjerncomputer ved at bruge denne syntaks (bemærk, at vi ønsker at overføre den faktiske mappe i dette tilfælde, så vi udelader den afsluttende skråstreg):
- rsync -a ~/dir1 username@remote_host:destination_directory
Dette kaldes en “push”-operation, fordi den skubber en mappe fra det lokale system til et fjernsystem. Den modsatte operation er “pull”. Den bruges til at synkronisere en fjernmappe til det lokale system. Hvis dir1
var på fjernsystemet i stedet for vores lokale system, ville syntaksen være:
- rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
Lige cp
og lignende værktøjer er kilden altid det første argument, og destinationen er altid det andet.
Nyttige muligheder for Rsync
Rsync indeholder mange muligheder for at ændre værktøjets standardadfærd. Vi har allerede diskuteret nogle af de mere nødvendige flag.
Hvis du overfører filer, der ikke allerede er blevet komprimeret, f.eks. tekstfiler, kan du reducere netværksoverførslen ved at tilføje komprimering med -z
-indstillingen:
- rsync -az source destination
Det -P
-flag er meget nyttigt. Det kombinerer flagene --progress
og --partial
. Det første giver dig en statuslinje for overførslerne, og det andet giver dig mulighed for at genoptage afbrudte overførsler:
- rsync -azP source destination
Outputsending incremental file list./file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)file100 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)file11 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101). . .
Hvis vi kører kommandoen igen, vil vi få et kortere output, fordi der ikke er foretaget nogen ændringer. Dette illustrerer rsyncs evne til at bruge ændringstider til at afgøre, om der er foretaget ændringer.
- rsync -azP source destination
Outputsending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00
Vi kan opdatere ændringstiden på nogle af filerne og se, at rsync på intelligent vis kun kopierer de ændrede filer igen:
- touch dir1/file{1..10}
- rsync -azP source destination
Outputsending incremental file listfile1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101). . .
For at holde to mapper virkelig synkroniserede, er det nødvendigt at slette filer fra destinationsmappen, hvis de fjernes fra kilden. Som standard sletter rsync ikke noget fra destinationsmappen.
Vi kan ændre denne adfærd med indstillingen --delete
. Før du bruger denne indstilling, skal du bruge indstillingen --dry-run
og foretage testning for at forhindre tab af data:
- rsync -a --delete source destination
Hvis du ønsker at udelukke visse filer eller mapper, der befinder sig i en mappe, du synkroniserer, kan du gøre det ved at angive dem i en kommasepareret liste efter indstillingen --exclude=
:
- rsync -a --exclude=pattern_to_exclude source destination
Hvis vi har angivet et mønster til udelukkelse, kan vi tilsidesætte denne udelukkelse for filer, der passer til et andet mønster, ved at bruge indstillingen --include=
.
- rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
Endeligt kan rsync’s --backup
-indstilling bruges til at gemme sikkerhedskopier af vigtige filer. Den bruges sammen med --backup-dir
-indstillingen, som angiver den mappe, hvor backupfilerne skal gemmes.
- rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
Slutning
Rsync kan forenkle filoverførsler over netværksforbindelser og tilføje robusthed til synkronisering af lokale mapper. Fleksibiliteten i rsync gør det til en god mulighed for mange forskellige operationer på filniveau.
En beherskelse af rsync giver dig mulighed for at designe komplekse backup-operationer og opnå finkornet kontrol over, hvad der overføres og hvordan.