Употреба команде рсинц за синхронизацију датотека и директоријума [11 Examples]

Увод у рсинц

рсинц представља слободан алат командне линије, омогућавајући синхронизацију фајлова како локално, тако и на удаљеним дестинацијама. Кроз његову употребу, могуће је преносити како појединачне фајлове, тако и комплетне директоријуме.

Захваљујући овим карактеристикама, рсинц се показује изузетно корисним приликом миграције података, креирања резервних копија, као и за процесе репликације, што га чини незаобилазним ресурсом за вебмастере и администраторе приликом обављања рутинских задатака преноса података.

Циљ овог чланка је да разјасни начин функционисања рсинц-а, као и да представи практичне примере његове употребе.

Како рсинц функционише?

рсинц је алат за даљинску синхронизацију који се користи у системима сличним Уник-у, а функционише кроз командну линију. Корисницима пружа могућност преноса и синхронизације фајлова између различитих рачунара или хостова, без икаквих проблема.

У основи, рсинц користи алгоритам делта преноса. Овај алгоритам ради на принципу копирања разлика између две фајла који се налазе на изворном и одредишном хосту. Извор и одредиште могу бити локални или удаљени. Команда рсинц може да обавља задатке копирања и синхронизације података на два различита начина:

  • Коришћењем ссх или рсх протокола за копирање и синхронизацију између хостова.
  • Коришћењем ТЦП рсинц демона за копирање и синхронизацију.

Пошто је рсинц дизајниран за Уник системе, одлично функционише и на Линук оперативним системима.

Процес који рсинц користи, корак по корак, изгледа овако:

  • рсинц користи ССХ за успостављање везе са удаљеним хостом, захтевајући лозинку.
  • По успостављању везе, рсинц на удаљеном хосту комуницира са изворним хостом.
  • Ови програми утврђују који фајлови и директоријуми захтевају синхронизацију. За проверу разлика између фајлова се користи алгоритам делта преноса.

Ако рсинц не пронађе фајл на удаљеном хосту, али га пронађе на изворном, он ће га прекопирати на систем домаћина. Слично томе, за фајлове који већ постоје на оба система, копираће само разлике (измењене делове). Фајлове који су идентични на оба система, без модификација, ће игнорисати.

рсинц омогућава инкрементална ажурирања тако што разлике чува у привременом фајлу пре него што их пошаље на одредиште.

Пре почетка употребе:

  • Неопходне су роот или судо привилегије.
  • Потребан је приступ терминалу или командној линији.
  • За безбедно покретање рсинц команди је неопходан ССХ приступ.
  • Потребне су две машине за тестирање рсинц-а.

За овај туторијал, користићемо Линук Минт 21.1 Вера. Водич се може лако пратити и са било којом другом Линук дистрибуцијом.

Зашто одабрати рсинц уместо сцп?

сцп (сигурна копија) је широко коришћен протокол командне линије који омогућава копирање фајлова. Он прати линеарни приступ, што значи да директно копира фајлове са извора на одредиште. За сигуран пренос користи ССХ.

Синтакса сцп команде је следећа:

scp опција ИЗВОР ОДРЕДИШТЕ

Међутим, намеће се питање, зашто изабрати рсинц уместо сцп?

рсинц нуди неколико предности, а то су:

  • Брже извршавање: рсинц је бржи од сцп-а, захваљујући протоколу за даљинско ажурирање. Ово му омогућава да преноси само разлике, а не целокупну фајл. Дакле, ако подесите редовну синхронизацију, пуна копија је потребна само први пут. Након тога, преко алгоритма делта преноса се копирају само ажурирани делови.
  • Мања потрошња пропусног опсега: Пошто рсинц не копира поново цео фајл, долази до мање потрошње пропусног опсега. Поред тога, користи се и компресија и декомпресија како би се смањила величина фајла током преноса.
  • Шири спектар опција командне линије: рсинц нуди већи број опција командне линије у односу на сцп. То омогућава кориснику детаљније подешавање процеса синхронизације.

У закључку, рсинц је одличан алат за инкременталну синхронизацију. сцп је такође користан за безбедан пренос фајлова. У реалним сценаријима, сцп је погодан за свакодневне задатке који захтевају једноставнији приступ. Међутим, за задатке који се понављају препоручује се коришћење рсинц-а.

Синтакса рсинц команде

Основни облик рсинц команде је:

rsync [ОПЦИЈА] ИЗВОР ДЕСТ

Термини који се користе у синтакси су:

  • ОПЦИЈА – Параметри који дефинишу понашање рсинц-а.
  • ИЗВОР – Директоријум са којег се фајлови копирају.
  • ДЕСТ – Директоријум на који се фајлови копирају.
  • УСЕР – Корисничко име на удаљеном систему.
  • ХОСТ – Име хоста или ИП адреса удаљеног система.

Опције су параметри који нуде додатну функционалност команди. На пример, помоћу опције -р можете рекурзивно синхронизовати податке. Међутим, опција -р не синхронизује власништво над групама и корисницима, временске ознаке, дозволе или симболичке везе. Уместо тога, можете користити опцију -а, која покреће команду у режиму архивирања, обезбеђујући да се приликом копирања сачувају све информације о власништву, дозволе и симболичке везе.

Остале рсинц опције укључују:

  • -з: компресовање података ради уштеде простора.
  • -х: излаз у формату читљивом за људе.
  • -б: креирање резервне копије током процеса синхронизације.
  • -е: употреба ССХ протокола за даљински пренос.
  • –прогресс: приказивање напретка синхронизације.
  • -в: захтев за детаљнији излаз.
  • –н: извршавање „сувог покретања“ за тестирање подешавања.
  • -к: искључивање излаза команде рсинц.

Инсталирање рсинц-а

Већина Уник и Линук система има рсинц инсталиран. У случају да ваш систем нема инсталиран рсинц, можете га инсталирати користећи следеће команде.

За Дебиан/Убунту и Минт:

sudo apt-get install rsync

За Арцх Линук:

pacman -S rsync

За Гентоо:

emerge sys-apps/rsync

За ЦентОС/Федора/РЕХЛ:

sudo yum install rsync

За опенСУСЕ:

sudo zypper install rsync

С обзиром да користимо Линук Минт, рсинц је већ инсталиран. Можете покренути команду рсинц у терминалу да проверите да ли је инсталиран. Уколико је инсталиран, приказаће се његове могућности, опције и друге битне информације.

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.

Сада ћемо приказати рсинц на делу кроз различите примере.

За туторијал ћемо креирати два директоријума:

  • изворни директоријум
  • одредишни директоријум

Можете их креирати уносом следећих команди:

mkdir source-directory
mkdir dest-directory

Потребно је и да генеришемо фајлове ради тестирања. Направићемо неколико тестних фајлова помоћу наредне команде:

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

Овом командом се креира 100 празних фајлова у изворном директоријуму. То можете потврдити уносом следеће команде:

ls source-directory

Излаз:

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

Напомена: Одржали смо дест-директоријум празан.

Локално рекурзивно копирање директоријума

Иако је примарна намена рсинц-а копирање фајлова између локалног и удаљеног сервера, он је исто тако користан и за локално копирање фајлова.

У овом случају ћемо користити следећу рсинц синтаксу:

rsync опција ИЗВОР ОДРЕДИШТЕ

Копирајте фајлове из нашег изворног директоријума у одредишни директоријум покретањем следеће команде:

rsync -r source-directory/ dest-directory

Овде команда „рекурзивно“ копира фајлове из изворног у одредишни директоријум.

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

Ово копира сваки појединачни фајл из изворног у одредишни директоријум.

Локално копирање појединачног фајла

Сада када смо научили како да синхронизујемо два директоријума, научићемо како да копирамо један фајл.

У ту сврху, уредићемо празан фајл „file1“ у изворном директоријуму, а затим га синхронизовати са истом фајлом који се налази у одредишном директоријуму.

Да бисте уредили фајл, унесите следећу команду:

nano source-directory/file1

Копирајте и залепите следећи текст у нано едитор:

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.

Додавање садржаја у фајл.

Сада затворите и сачувајте фајл.

Сада копирајмо фајл користећи рсинц:

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
$

Као што сте можда приметили, користили смо опцију „–existing“. Ова опција ажурира постојеће фајлове. Уколико покренете команду без „–existing“, фајл се неће ажурирати иако се команда успешно изврши.

Уколико појединачни фајл који копирате не постоји у одредишном директоријуму, потребно је да покренете следећу команду:

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

Копирање више фајлова

Ако желите да копирате више фајлова, морате навести изворне путање фајлова, као и циљни директоријум.

У ту сврху, креираћемо два нова фајла: „newfile2“ и „newfile3“ у изворном директоријуму. Покрените следећу команду:

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

Сада, користите следећу команду за синхронизацију више фајлова:

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
$

Копирање фајла или директоријума са локалног на удаљени сервер

Синтакса рсинц-а за локални на даљински пренос изгледа овако:

rsync option SOURCE [email protected]:DEST

Као што видите, морате знати ИП адресу удаљене машине да би ово функционисало. Такође, потребно је да додате ИП адресу након изворног фајла.

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

Пре почетка преноса, тражиће лозинку. Унесите лозинку да бисте наставили. Такође, ако је корисник различит на удаљеној машини, потребно је да га поменете пре ИП адресе иза које следи @:

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

Ако желите да копирате више фајлова или директоријума, онда морате да наведете путање фајлова или директоријума. Синтакса за то је испод:

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

Протоколи за даљински пренос

рсинц вам омогућава да одредите специфичне протоколе за пренос фајлова. Да бисте то урадили, потребно је да користите опцију „-е“, а затим протокол.

На пример, ако желите да користите ссх протокол, морате да додате „-e ssh“ команди рсинц:

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

Копирање фајла или директоријума са удаљеног на локални сервер

Синтакса рсинц-а за даљински на локални пренос изгледа овако:

sync option [email protected]:SRC DEST

Ово ради на принципу захтева за преузимањем података. Да бисте добили потребне фајлове или директоријуме са удаљеног сервера на локалну машину, потребно је да покренете следећу команду:

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

Команда преузима фајлове из одредишног директоријума удаљене машине у изворни директоријум локалне машине.

Слично томе, можете извући одређени фајл тако што ћете га навести кроз његову пуну путању:

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

Да бисте копирали више фајлова или директоријума са локалног на удаљени сервер, потребно је да наведете путање унутар витичастих заграда (одвојене зарезима) после ИП адресе сервера:

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

Слично томе, можете поменути и фајлове.

Приказ напретка током преноса уживо

Добро је видети напредак током преноса већих количина података. За то је потребно да користите ознаку „–progress“. Додајте је команди рсинц и можете видети брзину преноса, преостало време и количину пренетих података.

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

Брисање изворних фајлова након завршеног преноса

Можете користити ознаку „–remove-source-files“ за уклањање изворних фајлова након завршеног преноса. Ово вам може помоћи у многим ситуацијама, посебно када је у питању обезбеђивање фајлова без остављања трага или једноставно за ослобађање простора.

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

рсинц „суво покретање“

рсинц вам такође омогућава да извршите процену пре стварног покретања команде. „Суво покретање“ вам омогућава да видите да ли радите праву ствар. На крају крајева, не желите да ажурирате фајлове грешком или чак да их избришете.

Потребно је да користите опцију „–dry-run“ да бисте извршили „суво покретање“. Додајте је у команду, затим извор и одредиште.

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

Излаз је сличан оном приликом претходног покретања. Међутим, приметићете напомену „(DRY RUN)“ на крају излаза.

Подешавање минималне и максималне величине фајла

рсинц вам омогућава да подесите минималну или максималну величину фајла током преноса.

Ако желите да преносите фајлове са минималном величином од 15КБ, потребно је да користите „–min-size=15k“.

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

Команда ће копирати само фајлове са минималном величином од 15КБ. Ако је величина фајла мања, биће игнорисана.

Слично томе, можете користити ознаку „–max-size“ за подешавање максималне величине фајла:

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

Овде ће рсинц игнорисати фајлове веће од 450К.

Постављање ограничења пропусног опсега

Ако обављате друге задатке који захтевају велики пропусни опсег, можете да подесите рсинц да постави ограничење пропусног опсега за пренос. Да бисте то урадили, користите „–bwlimit=КБ/с“.

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

Овде смо подесили пропусни опсег на 100КБ/с током преноса.

Завршне речи

Овим се завршава наш водич за рсинц команде. Научили смо како да користимо рсинц и ефикасно смо покрили многе