Поиск по сайту:

10 полезных примеров команды Linux rsync


Команда Linux rsync — это мощный инструмент для копирования файлов и синхронизации папок. Вот десять распространенных вариантов использования, которые вы сможете эффективно использовать в своих собственных системах.

Инструмент rsync

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

Вы можете использовать rsync для копирования файлов в другое место на жестком диске, на другой жесткий диск того же компьютера, на внешний USB-накопитель или в любое другое доступное по сети место.

Кроме того, rsync может дополнительно сохранять символические ссылки, жесткие ссылки и метаданные файлов, такие как права собственности на файлы, разрешения и время доступа. Для поддержки всей этой функциональности в rsync есть много опций, и для их определения требуется время. Мы собрали эти 10 примеров, чтобы помочь вам начать работу. Мы уже писали о создании резервных копий с помощью rsync, поэтому сосредоточимся здесь на других применениях.

При всех многочисленных параметрах структура команды rsync проста. Нам нужно указать источник, место назначения и параметры, которые мы хотим использовать. Вы, вероятно, обнаружите, что rsync уже установлен на вашем компьютере с Linux — он был установлен на всех наших тестовых машинах — но если это не так, он обязательно будет в репозиториях вашего дистрибутива.

1. Скопируйте файлы в другой каталог

Вот простой пример, который поможет нам начать. Мы собираемся скопировать файлы из каталога «project-files» в каталог «Documents». Мы используем два параметра: параметр -a (архив) и параметр -v (подробный). Параметр verbose указывает rsync объяснить, что он делает, как он это делает. Опция archive сохраняет право собственности на файл и некоторые другие элементы, которые мы вскоре рассмотрим.

Формат команды следующий: options source-location target-location.

rsync -av /home/dave/project-files/ /home/dave/Documents/

Использование ls в папке «Документы» показывает, что файлы были скопированы.

Пока rsync работает, файлы отображаются по мере их копирования. Нам говорят:

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

Мы изменили текстовый файл в исходном каталоге и повторили команду rsync.

rsync -av /home/dave/project-files/ /home/dave/Documents/

На этот раз единственный файл, который необходимо обновить, — это измененный нами текстовый файл. Показатель ускорения теперь составляет 30 850. Вот насколько эффективнее копировать измененную часть этого единственного файла, чем копировать все файлы.

Параметр -a (архив) фактически представляет собой набор других параметров. Это то же самое, что использовать все эти опции:

  • r: рекурсивно работать с деревьями каталогов в исходном каталоге и копировать их в целевой каталог, создавая их, если они там еще не существуют.
  • l: копировать символические ссылки как символические ссылки.
  • p: сохранить права доступа к файлам.
  • t: сохранить время изменения файла.
  • g: сохранить групповые разрешения.
  • o: сохранить право собственности на файл.
  • D: копирование специальных файлов и файлов устройств. Специальные файлы могут быть ориентированными на связь элементами, которые обрабатываются как файлы, такие как сокеты и каналы «первым поступил — первым вышел» (fifos). Файлы устройств – это специальные файлы, обеспечивающие доступ к устройствам и псевдоустройствам.

Это настолько часто используемая комбинация, что rsync предоставляет параметр -a (архив) в качестве сокращенного способа вызова их всех.

2. Скопируйте каталог в другой каталог

Если вы посмотрите на предыдущую команду rsync, вы увидите завершающую косую черту «/» в пути к файлу исходного каталога. Это важно. Он указывает rsync скопировать содержимое каталога. Если вы не укажете косую черту в конце, rsync скопирует каталог и его содержимое.

rsync -av /home/dave/project-files /home/dave/Documents/

На этот раз имя каталога добавляется к имени файла по мере их перечисления. Если мы заглянем внутрь целевого каталога, мы увидим, что исходная папка была скопирована с файлами внутри нее.

ls Documents/
ls Documents/project-files/

3. Скопируйте каталог на другой диск

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

rsync -av /home/dave/project-files /run/mount/drive2

Глядя на другой жесткий диск, мы видим, что каталог и файлы были скопированы на него.

ls run/mount/drive2/project-files/

4. Сначала сделайте пробный прогон

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

В тестовом прогоне rsync выполняет действия, о которых мы просили, но на самом деле их не выполняет. Он сообщает о том, что произошло бы, если бы команда была выполнена. Таким образом, мы можем убедиться, что команда делает именно то, что мы ожидаем.

Для принудительного пробного прогона мы используем параметр --dry-run.

rsync -av --dry-run /home/dave/geocoder /run/mount/drive2

Файлы, которые были бы скопированы, перечислены для нас, и мы получаем обычную статистику, за которой следует сообщение (DRY RUN), так что мы знаем, что на самом деле ничего не произошло.

5. Удаление файлов в целевом каталоге

Параметр --delete указывает rsync удалить файлы и каталоги в целевом каталоге , которые не находятся в исходном каталоге. Это означает, что целевой каталог будет точной копией исходного каталога. Мы будем осторожны и сначала воспользуемся опцией --dry-run.

rsync -av --delete --dry-run /home/dave/geocoder /run/mount/drive2

Нам сообщили, что два файла будут удалены. Если мы уверены, что нам все равно, что они будут удалены, мы можем удалить параметр --dry-run и выполнить команду по-настоящему.

rsync -av --delete /home/dave/geocoder /run/mount/drive2

На этот раз содержимое каталогов синхронизируется, а два лишних файла удаляются.

6. Удаление исходных файлов

Вы можете удалить исходные файлы после успешной передачи, в результате чего rsync больше походит на перемещение, чем на копирование. Если передача не удалась, исходные файлы не удаляются. Нам нужно использовать параметр --remove-source-files .

rsync -av --remove-source-files /home/dave/geocoder /run/mount/drive2

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

Кроме того, rsync удаляет только файлы из исходного каталога. Он не удаляет ни исходный каталог, ни какие-либо подкаталоги, а только файлы в них. Мы можем увидеть это, используя параметр -R (рекурсивный) с ls в исходном каталоге.

ls -R geocoder

7. Скопируйте файлы на удаленный компьютер

Для синхронизации папок с удаленным компьютером rsync должен быть установлен на обоих компьютерах. Настройте связь SSH между двумя компьютерами, прежде чем пытаться использовать rsync на удаленном компьютере.

Вы должны иметь возможность удаленно войти в систему как обычный пользователь на удаленном компьютере, чтобы rsync работал. Неважно, используете ли вы идентификатор и пароль для входа в систему или настроили ключи SSH для безопасного доступа без пароля, но если вы не можете войти в систему как пользователь, тогда rsync тоже не работает.

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

Единственное, что вам нужно сделать дополнительно, это добавить имя учетной записи пользователя и IP-адрес удаленного компьютера в начало пути к файлу назначения. Используйте знак «@», чтобы отделить имя пользователя от имени компьютера или IP-адреса, и двоеточие «:», чтобы отделить имя компьютера или IP-адрес от путь к каталогу.

В нашей тестовой сети эти две команды эквивалентны.

rsync -av /home/dave/geocoder dave@nostromo.local:/home/dave/Downloads
rsync -av /home/dave/geocoder dave@192.168.86.60:/home/dave/Downloads

Мы получаем ту же информацию, что и при локальном копировании файлов.

8. Включить или исключить файлы или каталоги

У вас могут быть файлы и каталоги в исходном каталоге, которые вы не хотите копировать на конечный компьютер. Вы можете исключить их с помощью параметра --exclude. Аналогичным образом вы можете включить определенные файлы и каталоги с помощью параметра --include.

Причуда заключается в том, что если вы используете параметр --include сам по себе, все файлы копируются, как обычно, включая специально включенные файлы. Чтобы скопировать только включенные файлы, вы должны --exclude все остальное.

Вы можете использовать столько параметров --include и --exclude в своей команде, сколько хотите, но убедитесь, что вы указали свой --include параметры перед параметрами --exclude. Кроме того, убедитесь, что у вас есть косая черта в конце пути к исходному файлу.

Эта команда копирует на конечный компьютер только файлы исходного кода C и файлы данных CSV.

rsync -av --include="*.c" --include="*.csv" --exclude="*" /home/dave/geocoder/ /run/mount/drive2/geocoder

Скопированы только те файлы, которые мы специально включили.

9. Сжимайте файлы при передаче

Параметр -z (сжать) заставляет rsync сжимать передаваемые файлы. Однако они не хранятся в виде сжатых файлов на целевом компьютере, они сжимаются только во время самой передачи. Это может ускорить длительные переводы.

rsync -avz /home/dave/geocoder /run/mount/drive2

10. Мониторинг прогресса

Говоря о длительных переводах, мы можем добавить некоторую статистику, чтобы мы могли видеть ход передачи.

Опция -P (partial, progress) фактически добавляет две опции: --partial и --progress. Параметр --partial указывает rsync сохранять частично переданные файлы, если передача не удалась. Это экономит время при перезапуске передачи.

Опция --progress печатает для каждого файла переданные данные в байтах и в процентах, скорость передачи, затраченное время, номер передаваемого файла и количество остальные файлы.

rsync -aP /home/dave/geocoder /run/mount/drive2

Вывод прокручивается довольно быстро, и его трудно прочитать. Вы можете немного улучшить ситуацию, удалив параметр -v (подробный) из команды. Даже тогда его все еще трудно читать, поскольку он проносится мимо.

Часто бывает полезнее следить за ходом всего переноса. Вы можете сделать это с помощью параметра –info и передать ему «progress2» в качестве параметра.

sync -a --info=progress2 /home/dave/geocoder /run/mount/drive2

Это дает отчет о ходе работы, который действительно полезен.

Как cp на стероидах

Команда rsync быстрая, гибкая и стоит того времени, которое потребуется для ознакомления с ней. Базовую форму команды rsync с параметрами -av, исходным и целевым каталогами совсем несложно запомнить.

Для многих случаев использования это все, что вам нужно. Успокойтесь с этим, а остальное придет легко.