rsync komandas lietojums failu un direktoriju sinhronizēšanai [11 Examples]

rsync ir brīvi lietojams komandrindas rīks, kas ļauj sinhronizēt failus lokāli un attālināti. Ar to jūs varat pārsūtīt failus un direktorijus.

Tas padara to ļoti noderīgu datu migrēšanai, dublēšanai un spoguļošanai, padarot to lieliski piemērotu tīmekļa pārziņiem un administratoriem atkārtotu datu pārsūtīšanas uzdevumu veikšanai.

Šis raksts mums iemācīs, kā darbojas Rysnc, un sniegs dažus noderīgus piemērus.

Kā darbojas rsync?

rsync ir attālās sinhronizācijas komandrindas utilīta Unix līdzīgām sistēmām. Tas sniedz lietotājam iespēju nemanāmi pārsūtīt/sinhronizēt failus starp iekārtām vai diviem saimniekiem.

Zem pārsega rsync izmanto delta pārsūtīšanas algoritmu. Šis algoritms ietver atšķirību kopēšanu starp diviem failiem divos saimniekdatoros (avotā un galamērķī). Avots un galamērķis var būt lokāls vai attāls. Komanda rsync var veikt datu kopēšanas/sinhronizācijas uzdevumus divos veidos. Šie ir:

  • Izmantojiet ssh, rsh, lai kopētu/sinhronizētu starp diviem saimniekdatoriem.
  • Kopēšanai/sinhronizēšanai izmantojiet TCP rsync dēmonu.

Tā kā tas ir paredzēts darbam Unix līdzīgās sistēmās, tas darbojas arī Linux.

Soli pa solim process rsync tiek izmantots šādi:

  • Rsync izmanto SSH, lai izveidotu savienojumu ar attālo resursdatoru, un pieprasa paroli.
  • Kad ir izveidots savienojums, attālā saimniekdatora rsync sazinās ar avotu.
  • Šīs programmas pēc tam noteiks failus un direktorijus, kuriem nepieciešama sinhronizācija. Tas izmanto delta pārsūtīšanas algoritmu, lai pārbaudītu atšķirību starp failiem.

Ja komanda rsync neatrod failu tālvadības pultī, bet ne resursdatorā, tā kopēs un pārsūtīs to uz resursdatora sistēmu. Tāpat jau esošiem failiem (gan resursdatorā, gan attālinātajā ierīcē) tiks kopēta atšķirība starp tiem (ti, mainītās daļas). Visbeidzot, tas ignorēs esošos failus abās sistēmās bez izmaiņām.

Komanda rsync nodrošina pakāpeniskus atjauninājumus, saglabājot atšķirību pagaidu failā pirms tā nosūtīšanas uz galamērķi.

Pirms sākat:

  • Jums ir jābūt root vai sudo tiesībām
  • Piekļūstiet terminālim/komandrindai
  • SSH piekļuve drošai rsync komandu izpildei
  • Lai izveidotu rsync, jums ir nepieciešamas arī divas mašīnas.

Apmācībai mēs izmantosim Linux Mint 21.1 Vera. Varat viegli sekot rokasgrāmatai bez problēmām, izmantojot jebkuru citu Linux distro.

Kāpēc izmantot rsync Over Scp?

Scp (drošā kopija) ir populārs komandrindas protokols, kas lietotājiem ļauj kopēt failus. Kopēšanai tiek izmantota lineāra pieeja. Tas nozīmē, ka tas vienkārši kopē failus no avota uz galamērķi. Lai to izdarītu droši, tas izmanto SSH.

Scp komandas sintakse ir šāda:

scp option SOURCE DESTINATION

Tomēr paliek jautājums, kāpēc izmantot rsync, nevis scp?

rsync izmantošanai ir vairākas priekšrocības. Šīs priekšrocības ietver:

  • Ātrāka izpilde: rsync ir ātrāks par scp, jo tas izmanto attālās atjaunināšanas protokolu. Tas ļauj pārsūtīt tikai atšķirības, nevis visu failu. Tātad, ja laika gaitā iestatāt regulāru sinhronizāciju, jums tikai pirmajā reizē ir jāveic pilna kopija. No nākamās reizes tas kopē tikai atjauninātās daļas, izmantojot delta pārsūtīšanas algoritmu.
  • Mazāks joslas platuma patēriņš: tā kā rsync nav vēlreiz jākopē viss fails, tas samazina joslas platuma patēriņu. Turklāt tas izmanto arī saspiešanas/dekompresijas algoritmus, lai pārsūtīšanas laikā samazinātu faila lielumu.
  • Vairāk komandrindas opciju: rsync pārspēj scp arī komandrindas opciju skaitā. Tas nozīmē, ka varat precizēt rsync vairāk nekā scp.

Visbeidzot, rsync ir lielisks papildu sinhronizācijas rīks. Scp rīks ir noderīgs arī drošai failu pārsūtīšanai/sinhronizēšanai. Reālā scenārijā scp ir piemērots ikdienas uzdevumiem, ja meklējat vienkāršāku pieeju. Tomēr atkārtotiem uzdevumiem izmantojiet rsync.

  Pirms Mac OS X: kas bija NeXTSTEP un kāpēc cilvēkiem tas patika?

rsync komandas sintakse

Rsync komanda ir šāda:

Šeit termini ir definēti zemāk:

  • OPTION — šīs ir rsync opcijas
  • AVOTS — avotu direktorijs
  • DEST — galamērķa direktorijs
  • LIETOTĀJS — attālais lietotājvārds
  • HOST — attālā resursdatora nosaukums vai IP adrese

Opcijas ir parametri, kas komandai piedāvā papildu funkcionalitāti. Piemēram, varat rekursīvi sinhronizēt datus ar opciju -r. Tomēr opcija -r nesinhronizē grupu un lietotāju īpašumtiesības, laikspiedolus, atļaujas vai simboliskas saites. Tā vietā varat izmantot opciju -a, kas palaiž komandu arhīva režīmā, nodrošinot, ka kopēšanas laikā tiek saglabātas visas faila īpašumtiesības, atļaujas un simboliskās saites.

Citas rsync opcijas ietver:

  • -z: saspiediet datus, lai ietaupītu vietu
  • -h: nodrošina cilvēkam lasāmu formāta izvadi
  • -b: veic dublēšanu datu sinhronizācijas procesa laikā
  • -e: izmantojiet SSH protokolu attālai datu pārsūtīšanai
  • -Progress: parāda datu sinhronizācijas gaitu
  • -v: lūdziet rsync parādīt detalizētu izvadi
  • –n: veiciet sauso darbību, lai pārbaudītu iestatījumus un datu sinhronizācijas iestatījumus
  • -q: nomāc rsync komandas izvadi un opcijas

Rsync instalēšana

Lielākajai daļai Unix un Linux sistēmu ir instalēta rsync. Ja jūsu sistēmā nav rsync, varat to instalēt, izmantojot šādu(-s) komandu(-as).

Debian/Ubuntu un Mint

sudo apt-get install rsync

Arch Linux

pacman -S rsync

Uz Gentoo

emerge sys-apps/rsync

Vietnē CentOS/Fedora/REHL

sudo yum install rsync

Vietnē openSUSE

sudo zypper install rsync

Tā kā mums ir Linux Mint, rsync bija iepriekš instalēts. Tātad terminālī varat palaist komandu rsync, lai redzētu, vai tā ir instalēta. Tas izskaidros tā iespējas, iespējas un citu svarīgu informāciju, ja tā ir pieejama.

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.

Tagad apskatīsim rsync darbībā ar dažādiem lietošanas gadījumiem.

Apmācībai mēs izveidosim divus direktorijus.

  • avota direktorijs
  • galamērķa direktorijs

Lai to izdarītu, jums jāievada šādas komandas.

mkdir source-directory
mkdir dest-directory

Turklāt mums būs jāģenerē faili, lai rsync darbotos. Tāpēc izveidosim dažus testa failus, izmantojot tālāk norādīto komandu.

touch source-directory/file{1..100}

Tādējādi avota direktorijā tiek izveidoti 100 tukši faili. To var apstiprināt, ievadot komandu zemāk.

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

Piezīme. Mēs esam atstājuši tukšu dest-direktoriju.

Kopēt direktorijus lokāli rekursīvi

Lai gan rsync galvenais mērķis ir kopēt failus starp vietējo un attālo serveri, tas ir vienlīdz noderīgi, lai kopētu failus lokāli.

  Kā noņemt vokālu no jebkuras dziesmas, izmantojot LALAL.AI?

Šajā gadījumā mēs izmantosim šādu rsync sintaksi.

rsync opcija SOURCE DESTINATION

Kopējiet failus mūsu avota direktorijā uz galamērķa direktoriju, izpildot šo komandu.

rsync -r source-directory/ dest-directory

Šeit komanda “rekursīvi” kopē failus no avota direktorija uz gala direktoriju.

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

Tādējādi katrs avota direktorijā esošais fails tiek kopēts galamērķa direktorijā.

Kopēt vienu failu lokāli

Tagad, kad esam iemācījušies sinhronizēt divus direktorijus, mēs iemācīsimies kopēt vienu failu.

Šim nolūkam mēs rediģēsim tukšo failu file1 avota direktorijā un pēc tam sinhronizēsim to ar to pašu failu, kas atrodas gala direktorijā.

Lai rediģētu failu, ierakstiet šo komandu.

nano source-directory/file1

Tagad kopējiet un ielīmējiet šo tekstu nano redaktorā.

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.

Satura pievienošana failam

Tagad aizveriet un saglabājiet failu.

Tagad kopēsim failu, izmantojot 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
$ 

Kā jūs, iespējams, pamanījāt, mēs izmantojām esošo opciju. Tas atjaunina esošos failus. Ja palaižat komandu bez eksistences, tā netiks atjaunināta, lai gan tā darbojas veiksmīgi.

Ja atsevišķais kopējamais fails neeksistē mērķa mapē, jums ir jāizpilda šāda komanda.

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

Vairāku failu kopēšana

Ja plānojat kopēt vairākus failus, jums ir jānorāda abu failu avota ceļi, kam seko mērķa direktorijs.

Šim nolūkam mēs avota direktorijā izveidosim divus jaunus failus: newfile2 un newfile3. Lai to izdarītu, palaidiet šādu komandu.

touch source-directory/newfile{2..3}

Tagad izmantojiet šo komandu, lai sinhronizētu vairākus failus.

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
$ 

Kopējiet failu vai direktoriju no lokālā uz attālo

Rsync sintakse vietējai pārsūtīšanai uz attālo ir šāda.

rsync option SOURCE [email protected]:DEST

Kā redzat, jums ir jāzina attālās mašīnas IP adrese, lai tas darbotos. Tāpat pēc avota faila ir jāpievieno IP adrese.

rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Pirms pārsūtīšanas tas prasīs paroli. Ievadiet to, lai turpinātu. Turklāt, ja attālajā mašīnā lietotājs atšķiras, tas ir jānorāda pirms IP adreses, kam seko @.

rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory

Ja plānojat kopēt vairākus failus vai direktorijus, jums ir jānorāda faili vai direktoriju ceļi. Tās sintakse ir norādīta zemāk.

rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Attālās pārsūtīšanas specifiskie protokoli

rsync ļauj norādīt konkrētus failu pārsūtīšanas protokolus. Lai to izdarītu, jums ir jāizmanto opcija -e, kam seko protokols.

  Labākie Siri saīsnes darba sākšanai

Piemēram, ja vēlaties izmantot ssh protokolu, komandai rsync jāpievieno -e ssh.

rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Faila vai direktorija kopēšana no attālās uz lokālo

Rsync sintakse vietējai pārsūtīšanai uz attālo ir šāda.

sync option [email protected]:SRC DEST

Tas darbojas kā izvilkšanas pieprasījums. Tātad, lai iegūtu nepieciešamos failus/direktoriju no attālā servera uz vietējo mašīnu, jums ir jāpalaiž šāda komanda.

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Komanda izvelk failus attālās mašīnas galamērķa direktorijā uz vietējās mašīnas avota direktoriju.

Tāpat jūs varat izvilkt noteiktu failu, pieminot to visā tā ceļā.

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory

Lai kopētu vairākus failus vai direktorijus no lokālā uz attālo, jums ir jānorāda ceļš cirtainajās iekavās (atdalot ar komatiem) aiz servera IP adreses.

rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory

Tāpat varat minēt arī failus.

Rādīt tiešraides norisi pārsūtīšanas laikā

Ir laba ideja reāllaikā redzēt lielāku datu dublējumkopiju progresu. Lai to izdarītu, jums ir jāizmanto karogs -progress. Pievienojiet to komandai rsync, un jūs varat redzēt pārsūtīšanas ātrumu, atlikušo laiku un pārsūtīto datu apjomu.

rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Kad pārsūtīšana ir pabeigta, izdzēsiet avota failus

Varat izmantot karogu -remove-source-files, lai noņemtu avota failus pēc pilnīgas pārsūtīšanas. Tas var jums palīdzēt daudzos gadījumos, it īpaši, ja runa ir par failu drošību, neatstājot nekādas pēdas, vai vienkārši izmantojot tos, lai atbrīvotu vietu.

rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

rsync sausā palaišana

Rysnc arī ļauj novērtēt, pirms veicat faktisko skrējienu. Sausā gaita ļauj redzēt, vai darāt pareizi. Galu galā jūs nevēlaties kļūdas dēļ atjaunināt failus vai pat tos dzēst.

Lai veiktu sauso darbību, ir jāizmanto opcija –dry-run. Pievienojiet to komandai, kam seko avots un galamērķis.

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

Rezultāts ir līdzīgs tam, kā mēs to izmantojām iepriekš. Tomēr izvades beigās pamanīsit pieminējumu (DRY RUN).

Iestatiet minimālo un maksimālo faila lielumu

Rysnc arī ļauj iestatīt minimālo vai maksimālo faila lielumu pārsūtīšanas laikā.

Tātad, ja vēlaties pārsūtīt ar minimālo izmēru 15 KB, jums ir jāizmanto –min-size=15K.

rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Komanda kopēs tikai failus, kuru minimālais faila lielums ir 15 KB. Ja faila lielums ir mazāks, tas to ignorēs.

Līdzīgi varat izmantot karodziņu –max-size, lai iestatītu maksimālo faila lielumu.

rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Šeit rsync ignorēs failus, kuru izmērs pārsniedz 450 K.

Iestatiet joslas platuma ierobežojumu

Ja veicat citus joslas platuma ietilpīgus uzdevumus, varat iestatīt rysnc, lai iestatītu pārsūtīšanas joslas platuma ierobežojumu. Lai to izdarītu, izmantojiet –bwlimit=KB/s.

rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Šeit mēs pārsūtīšanas laikā iestatījām joslas platumu uz 100 Kb/s.

Nobeiguma vārdi

Tas mūs noved pie mūsu rsync komandu rokasgrāmatas beigām. Mēs iemācījāmies izmantot rysnc un efektīvi aptvērām daudzas komandas.

Tomēr rysnc piedāvā daudz vairāk, nekā mēs aprakstījām. Tāpēc, iespējams, vēlēsities apskatīt rsync rokasgrāmatas lapu, kurā ir apskatīti visi rsync aspekti.

Pēc tam pārbaudiet komandrindas apkrāpšanas lapas operētājsistēmām Windows, Linux un macOS.