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.
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.
Š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.
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.