Как освоить команду rsync в Linux

Как следует из названия, rsync - это инструмент синхронизации. В первый раз, когда вы его используете, он просто копирует файлы и каталоги из одного места в другое. Однако при последующих использованиях он синхронизирует только различия между этими местоположениями. Поэтому, если вы добавите один файл в исходный каталог, rsync скопирует только новый файл в назначение. Это экономит время и пропускную способность, особенно при копировании на удаленные местоположения.

Представьте, что у вас есть 50 ГБ данных, которые нужно синхронизировать с удаленным сервером. Вы можете запланировать выполнение rsync ежедневно. Вместо того чтобы каждый раз копировать все 50 ГБ, утилита будет отправлять только различия. Это может означать, что ей нужно загружать всего несколько мегабайт данных каждый день, а не гигабайты.

На изображении выше вы можете видеть, что в первый раз было передано 104 МБ, в то время как при втором использовании потребуется всего 31 КБ.

Также читайте: Использование Rclone для синхронизации с несколькими облачными хранилищами в Linux

Как установить rsync на разных дистрибутивах Linux

На Debian и дистрибутивах, основанных на Debian, таких как Ubuntu, вы можете установить rsync с помощью:

sudo apt install rsync

rsync-install

На Fedora установите с помощью:

dnf install rsync

А на дистрибутивах, производных от RedHat (например, CentOS):

yum install rsync

Чтобы установить rsync на Arch Linux, используйте команду:

pacman -S rsync

На openSUSE используйте:

zypper install rsync

Если он не включен в ваши стандартные репозитории, обратитесь к странице установки rsync для openSUSE.

Как использовать rsync для синхронизации локальных файлов или каталогов

Общая синтаксис rsync: rsync [options] /path/to/source /path/to/destination.

[options] обозначает параметры командной строки, которые вы можете найти в справочнике:

man rsync

rsync-command-line-options

Нажмите q, чтобы выйти из справочника.

Чтобы скопировать файл:

rsync /bin/ls .

Команда выше эквивалентна rsync /bin/ls /home/your_username. Это копирует команду “ls” в тот каталог, в котором вы находитесь в данный момент. По умолчанию это должно быть /home/your_username. Точка . означает текущий каталог. Путевые имена могут быть абсолютными (/home/your_username/Downloads/chrome.zip) или относительными к текущему каталогу (Downloads/chrome.zip).

Когда вы имеете дело с очень большими файлами, вы можете использовать эту команду:

rsync -P/path/to/file/path/to/destination

Это покажет прогресс и позволит вам возобновить прерванную передачу. В случае, если вам нужно возобновить, используйте:

rsync -P--append path/to/file/path/to/destination

Без --append передача начнется с нуля.

Чтобы синхронизировать каталоги:

rsync -av/path/to/source/path/to/destination

Пример команды:

rsync -av/bin .

Влияние завершающего слэша в rsync (Важно)

В предыдущей команде обратите внимание, что путь к исходному каталогу не содержит завершающего слэша / (/bin против /bin/). Без завершающего слэша rsync копирует сам каталог. Поэтому rsync -av /bin . приводит к тому, что показано на следующем изображении.

rsync-without-trailing-slash

Когда используется завершающий слэш, rsync копирует содержимое этого каталога. В этом случае каждый файл из /bin будет разбросан по каталогу назначения. Поэтому rsync -av /bin/ . приведет к тому, что показано на следующем изображении.

rsync-with-trailing-slash

Очень важно помнить об этом различии, поскольку использование TAB для авто-дополнения имен каталогов автоматически добавляет завершающий слэш в конце. Так что имейте это в виду, чтобы избежать создания беспорядка в каталоге назначения.

Как использовать rsync для синхронизации с удаленными местоположениями (например, серверами)

То, что было описано в предыдущем разделе, также верно при работе с удаленными местоположениями. Единственное отличие в том, что вам нужно добавить имя пользователя для входа и адрес удаленного местоположения. Чтобы отправить ваш каталог /bin на удаленный компьютер, используйте:

rsync -av/bin [email protected]:/home/your_username

rsync подключается через OpenSSH. Это означает, что вам нужно заранее настроить сервер OpenSSH и учетные данные для входа на удаленном месте. Обратите внимание, что your_username относится к имени пользователя, созданному на сервере. Это может отличаться от имени пользователя, которое у вас есть на вашем локальном компьютере.

Если у вас есть доменное имя и вы указываете его на IP-адрес вашего сервера, вы можете использовать домен в команде:

rsync -av/bin [email protected]:/home/your_username

При больших передачах полезно также сжимать данные перед отправкой по сети, добавив параметр -z:

rsync -avz/bin [email protected]:/home/your_username

Вы можете исключить параметр сжатия, когда отправляете файлы, которые уже сжаты (аудиофайлы, такие как MP3, видео, изображения JPEG). Их нельзя сжать дальше, поэтому вы на самом деле потратите время, используя -z для них.

Чтобы скопировать файлы с удаленного местоположения на ваш локальный компьютер, просто поменяйте местоположения местами:

rsync -avz [email protected]:/bin /home/your_username

Заключение

Это охватывает самые важные команды rsync, которые вам нужно знать. Если вам когда-либо понадобится больше контроля над тем, как синхронизировать каталоги, обратитесь к онлайн-справке rsync и прокрутите несколько страниц вниз, пока не найдете “Обзор параметров”.