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
, исходным и целевым каталогами совсем несложно запомнить.
Для многих случаев использования это все, что вам нужно. Успокойтесь с этим, а остальное придет легко.