Rsync команда в Linux с практически пример

Сподели

Това ръководство ви показва как да използвате командата rsync в Linux за синхронизиране на файлове и директории, използвайки прости примери.

Съдържание

Rsync е командна част от задължителните умения на всеки Linux администратор. Това е инструмент от командния ред за отразяване на файлове и директории, създаване на резервни копия и мигриране на данни към други сървъри.

Използването на rsync Командата е функционално подобна на командата SCP, но предоставя някои предимства и повече гъвкавост.

Това ръководство ще ви покаже как да използвате rsync команда за ефективно извършване на синхронизация на файлове и директории под Linux, използвайки прости примери. Повечето от тях ще изискват използването на две Linux машини.

следователно rsync трябва да е наличен. За щастие, той е предварително инсталиран и се предлага в повечето Linux дистрибуции. Но ако го нямате, можете лесно да го инсталирате, като използвате мениджъра на пакети на вашата дистрибуция, като APT, DNF, Pacman, XBPS и т.н., а името на пакета е rsync.

Как работи командата Rsync

Rsync извършва еднопосочна синхронизация и по подразбиране използва SSH, за да гарантира сигурността на трансфера. В допълнение, a rsync процесът работи чрез комуникация с друг rsync процес.

Следователно, ако искате да синхронизирате файлове или директории между два отдалечени сървъра, rsync командата трябва първо да бъде инсталирана и на двете.

Rsync, както беше споменато по-рано, използва SSH зад кулисите. В резултат на това, независимо от типа Linux машина, която използвате, силно се препоръчва да създадете SSH ключове и на двете предварително. Ако не сте сигурни как да разгледате нашето отлично ръководство „Как да генерирате двойка SSH ключове (с примери)“.

Тогава би било най-добре да обмените тези SSH ключове между хостовете, за да осигурите работа без парола. Но отново можете да разчитате на нашето ръководство „Как да настроите SSH влизане без парола“ за помощ.

Когато клиент поиска синхронизация с отдалечен сървър, rsync определя кои файлове трябва да бъдат прехвърлени. Това означава, че rsync ще прехвърля само файлове (алгоритъм за делта-прехвърляне), които са били променени междувременно.

Най-основният подход rsync използва за тази цел е просто рекурсивно сканиране на папки и оценка на датите на модификация и точните размери на файловете.

Сега, след като знаете как работи Rsync, нека проучим как да го използвате.

Синтаксис на командата Rsync

Въпреки това, преди да преминем към това как да използваме rsyncумен ход е да разберете синтаксиса на rsync команда. След това можем да имаме предвид синтаксиса, докато разглеждаме примерите.

rsync [OPTIONS] SOURCE DESTINATION

Най-важното нещо, което трябва да запомните е, че SOURCE е местоположението, от което ще бъдат копирани файловете или директориите, и DESTINATION е местоположението, в което ще бъдат прехвърлени файловете и директориите.

Ето кратка измамна таблица, подчертаваща най-важните аргументи на rsync команда.

  • -a, --archive: режимът на архивиране позволява рекурсивно копиране на файлове, като същевременно запазва символните връзки, разрешенията за файлове, собствеността на потребителя и групата и времевите марки.
  • -h, --human-readable: числата в изхода се показват в четим от човека формат.
  • -n, --dry-run: извършете пробно пускане без промени.
  • -r, --recursive: копира данни рекурсивно, но не запазва клеймото за време и разрешението, докато прехвърля данни.
  • -v, --verbose: увеличаване на многословен.
  • -z, --compress: използва се за пестене на място чрез компресиране на данни по време на предаване.

Как да използвате командата Rsync в Linux

Повечето примери по-долу използват сценарий, включващ две Linux машини, символично обозначени east и west. С това уточнение, нека да стигнем до същината на ръководството.

Копирайте/синхронизирайте един файл локално

Следната команда ще синхронизира един файл (logo.jpg) от една директория (/srv/dir1) на друг (/srv/dir2) на локална машина. Ако целевата директория все още не съществува, rsync ще го създаде автоматично.

rsync /srv/dir1/logo.jpg /srv/dir2/
Копирайте един файл локално

Както виждаш, rsync функционира подобно на добре познатите cp команда в този случай.

Файлът с текущото име се копира, когато името на файла е пропуснато от целевото местоположение. Ако обаче искате да запишете файла под друго име, въведете новото име в частта за местоназначение.

rsync /srv/dir1/logo.jpg /srv/dir2/new-logo.jpg
Копирайте един файл локално

Копирайте/синхронизирайте множество файлове и директория рекурсивно локално

Истинската сила на rsync командата влиза в действие, когато синхронизираме цели директории.

Но преди да стигнем до конкретния пример, нека изясним нещо важно. Когато използвате rsync команда за синхронизиране на една директория и нейните поддиректории с друга, обикновено искате да запазите времето за модификация на файла, разрешенията за файлове, символните връзки и т.н.

За да постигнете това, трябва да комбинирате няколко опции. Крайният резултат изглежда така -rlptgoD, което е трудно да се запомни. за щастие rsync предоставя намалена версия на предходните опции, обединени в една единствена опция, -a.

Следователно, като добавите аргумента -a към вашата команда, получавате:

  • (-r) рекурсия в директории
  • (-l) копирайте символни връзки като символни връзки
  • (-p) запазване на разрешенията
  • (-t) запазване на времето за модификация
  • (-o) запази собственика
  • (-g) запазване на групата
  • (-D) запазване на файловете на устройството

в един лесен за запомняне и използване -a (архив) параметър.

С тези разяснения командата по-долу ще прехвърли всички файлове от /srv/dir1 директория към /srv/dir2 директория на същата машина.

rsync -a /srv/dir1/ /srv/dir2/

Въпреки това, когато се управлява по този начин, rsync командата не връща допълнителна информация за дейностите, които извършва. Така че ще добавим още три параметъра към опцията -a, за да видим какво ще се случи: -v, -zи -h.

Това ни води до класическия и най-широко използван rsync команда с -avzh параметри.

The -v опция предоставя допълнителна информация за трансфера, -z компресира файловете по време на прехвърлянето, за да спести място и -h показва размера на прехвърлените файлове в лесен за разбиране формат.

Можем да изпълним командата отново и изходът е значително по-информативен.

rsync -avzh /srv/dir1/ /srv/dir2/
Синхронизирайте множество файлове и директория рекурсивно локално

Копирайте/синхронизирайте множество файлове и директория рекурсивно от локална към отдалечена машина

Макар че rsync е отличен за локално синхронизиране на файлове във вашата система, най-често се използва за синхронизиране на файлове между две отдалечени Linux машини.

За да прехвърлите цялото съдържание на /srv/dir1 директория от локална машина (east) да се /tmp/dir1 на отдалечена машина (west), Тип:

rsync -avzh /srv/dir1/ [email protected]:/tmp/dir1/
Синхронизирайте множество файлове и директория от локална към отдалечена машина

Нека сега се съсредоточим върху синтаксиса. Първата част (източникът), както можете да видите, е пътят към нашата локална директория (/srv/dir1). Втората част, от друга страна, указва отдалечения хост, използвайки познатия [email protected] синтаксис от SSH.

Това е последвано от двоеточие (:) като разделител, последван от пълния път до директорията (/tmp/dir1) на отдалечената система, към която трябва да се прехвърлят файловете.

Копирайте/синхронизирайте множество файлове и директория рекурсивно от отдалечена към локална машина

Прехвърлянето на файлове от отдалечена машина към нашата локална машина е идентично с предходния пример. Единствената разлика е, че местоположението на източника и местоназначението са сменени.

Казано по друг начин, ще използваме отдалечената машина като източник и нашата локална машина като дестинация.

И така, за да прехвърлите цялото съдържание на отдалечената директория /tmp/dir1 на система с име west към своя /srv/dir1 на нашата локална машина изпълнете:

rsync -avzh [email protected]:/tmp/dir1/ /srv/dir1/
Синхронизирайте множество файлове и директория от отдалечена към локална машина

Изключване на файлове и директории от синхронизиране

Една полезна функция на rsync командата е способността да се посочи кои файлове или директории да бъдат изключени от операцията за синхронизиране.

Това може да стане по два начина: директно изброяване от командния ред (--exclude) или като посочите тези файлове и директории в отделен текстов файл (--exclude-from). Нека демонстрираме и двата подхода.

Например ще синхронизираме отдалечената директория /tmp/dir1 на сървъра west с нашия локален указател /srv/dir1. Все пак ще уточним, че myfiles указател и test.txt файлът да бъде изключен от процеса на синхронизиране.

С тези разяснения нашата команда ще бъде следната:

rsync -avzh --exclude=myfiles --exclude=test.txt [email protected]:/tmp/dir1/ /srv/dir1/
Изключете файлове и директории от синхронизиране

Моля, обърнете внимание, че предоставяме относителния път (test.txt), а не пълното (/srv/dir1/test.txt) път към файловете и директориите, които искаме да изключим.

Помислете за втория подход сега. За да направите това, създайте текстов файл със списък на файловете и директориите, които искаме да изключим, след което предайте този файл като аргумент на rsync команда.

За да постигнем това, създаваме тестов файл, наречен exclude.txtкоето изглежда по следния начин:

Изключете файлове и директории от синхронизиране

След това изпълняваме:

rsync -avzh --exclude-from=exclude.txt [email protected]:/tmp/dir1/ /srv/dir1/
Изключете файлове и директории от синхронизиране

Разбира се, можете да използвате --exclude опция със заместващ знак (*). Например, ако искате да изключите всички JPG файлове от синхронизация, можете да използвате --exclude=*.jpg.

Включете файлове за синхронизиране

Подобно на --exclude опция, --include ни позволява да посочим кои файлове искаме да включим в синхронизацията. Тази опция обаче работи най-добре, когато се комбинира с --exclude. Това ни позволява да ограничим типовете файлове, които могат да бъдат прехвърляни.

Например, ако искаме да прехвърлим само JPG файлове, като изключим всички останали, командата ще бъде както следва:

rsync -avzh --include="*.jpg" --exclude="*" [email protected]:/tmp/dir1/ /srv/dir1/
Включете само конкретни файлове за синхронизиране

Изтрий файловете

Изтриването на файлове, които не присъстват в източника, но са налични в дестинацията, е друга полезна опция при синхронизиране на файлове. Можем да постигнем тази функционалност с помощта на --delete опция.

В момента нашият местен /srv/dir1 директорията изглежда така:

Съдържание на директория

Предполагаме, че само index.php и logo.jpg файловете са налични на отдалечения сървър (west) в директорията, която искаме да синхронизираме (/tmp/dir1). Ние бягаме rsync с --delete опция:

rsync -avzh --delete [email protected]:/tmp/dir1/ /srv/dir1/
Изтрийте файлове чрез rsynk, които не са налични в източника

Както можете да видите, след бягане rsync с --delete опция, файловете, налични на нашата машина (дестинация), но не и в изходната директория, от която синхронизираме, се изтриват автоматично.

Но има едно нещо, което трябва да подчертаем. Бъдете много внимателни, докато бягате rsync с --delete опция. Ако направите грешка при посочване на вашия източник, всичко във вашата дестинация ще бъде премахнато.

Ето защо силно се препоръчва преди употреба --deleteвие тествате изпълнението на rsync команда с --dry-run добавена опция, която ще опишем в следващия раздел.

Извършване на суха работа с Rsync

Използването на тази опция може да ви спести много проблеми, причинени от грешка. The --dry-run опция инструктира rsync за извършване на пробно изпълнение, което не прави промени и дава резултати, идентични с реално изпълнение.

Позовавайки се на примера по-горе, можем да стартираме --delete команда с --dry-run опция за тестване дали резултатът е според очакванията.

rsync -avzh --delete --dry-run [email protected]:/tmp/dir1/ /srv/dir1/
Извършване на суха работа с командата rsync

Докато не се правят промени във файловете, можем да видим какви операции ще бъдат извършени по време на синхронизирането.

Изтрийте изходните файлове след прехвърляне

Понякога може да искате да изтриете изходните файлове след прехвърлянето. Например, можете да прехвърлите ежедневно архивиране на нов сървър. Така че след като прехвърлянето приключи, изходните файлове на стария сървър вече не са необходими.

Можете да използвате --remove-source-files опция за изтриване на изходния файл.

rsync -avzh --remove-source-files [email protected]:/tmp/dir1/ /srv/dir1/

Важното нещо, което трябва да запомните тук, е, че изпълнението rsync с --remove-source-files опция премахва само файлове от източника, но не и директории.

Избягвайте Rsync за презаписване на модифицирани целеви файлове

Както беше посочено по-горе, при използване rsync за синхронизиране на файлове между две директории, те не се прехвърлят, ако файловете присъстват и са идентични както в източника, така и в дестинацията.

Въпреки това, ако междувременно направите промени във файл в дестинацията, те ще бъдат заменени с оригинала в източника при следващо прехвърляне.

В такъв случай можете да добавите -u (--update) опция за пропускане на презаписването на актуализирани целеви файлове.

rsync -avzhu [email protected]:/tmp/dir1/ /srv/dir1/

Показване на напредъка по време на прехвърляне

Можете да използвате --progress опция за показване на напредъка при прехвърляне на данни. Така че, когато прехвърлянето за конкретен файл приключи, rsync показва обобщен ред, както е показано по-долу.

rsync -avzh --progress [email protected]:/tmp/dir1/ /srv/dir1/
Показване на напредъка по време на прехвърлянето

Задайте максимален и минимален размер на файла за прехвърляне

Друга полезна функция на rsync командата е способността да се посочи максимумът (--max-size) или минимум (--min-size) размер на файловете за синхронизиране.

Изпълнете следната команда, за да пропуснете всеки файл, по-малък от 100 KB:

rsync -avzh --min-size=100k [email protected]:/tmp/dir1/ /srv/dir1/

По същия начин, за да прехвърлите файлове, не по-големи от 1 MB, използвайте следната команда:

rsync -avzh --max-size=1m [email protected]:/tmp/dir1/ /srv/dir1/

Задайте лимит на честотната лента

Използвай --bwlimit опция за задаване на ограничение на честотната лента по време на прехвърляне на данни между машини. Тази опция е полезна, когато не искате да претоварвате пропускателната способност на вашата мрежа. В допълнение, на rsync командата използва килобайта в секунда (KB/s) като своя мерна единица.

Например, за да зададете максимална скорост на трансфер на 500KB/s, въведете:

rsync -avzh --bwlimit=500 [email protected]:/tmp/dir1/ /srv/dir1/

Заключение

В тази статия разгледахме най-честите начини за използване на rsync команда за синхронизиране на файлове под Linux. Надяваме се, че сме ви били полезни.

Повече информация относно rsync командата може да бъде намерена на неговата страница с ръководство.

Моля, не се колебайте да оставите вашите коментари, предложения и допълнения в секцията по-долу.

Публикациите се превеждат автоматично с google translate


Сподели