Това ръководство ви показва как да използвате командата 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/
Както можете да видите, след бягане 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/
Докато не се правят промени във файловете, можем да видим какви операции ще бъдат извършени по време на синхронизирането.
Изтрийте изходните файлове след прехвърляне
Понякога може да искате да изтриете изходните файлове след прехвърлянето. Например, можете да прехвърлите ежедневно архивиране на нов сървър. Така че след като прехвърлянето приключи, изходните файлове на стария сървър вече не са необходими.
Можете да използвате --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