10 полезных примеров команды Linux rsync
Опубликовано: 2022-10-28 Команда 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 destination-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 Документы/
ls Документы/файлы проекта/
3. Скопируйте каталог на другой диск
Копирование файлов в другое место на том же жестком диске не защищает от сбоя диска. Если этот диск исчезнет, вы потеряете исходную и конечную копии этих файлов. Копирование их на другой жесткий диск — гораздо более надежный способ защитить ваши данные. Все, что нам нужно сделать, это указать правильный путь к целевому диску.
rsync -av /home/dave/project-files /run/mount/drive2
Глядя на другой жесткий диск, мы видим, что каталог и файлы были скопированы на него.
ls запустить/монтировать/drive2/файлы проекта/
СВЯЗАННЫЕ С: Что делать, если ваш жесткий диск выходит из строя
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 геокодер
7. Скопируйте файлы на удаленный компьютер
Для синхронизации папок с удаленным компьютером на обоих компьютерах должен быть установлен rsync
. Настройте связь SSH между двумя компьютерами, прежде чем пытаться использовать rsync
для удаленного компьютера.
Вы должны иметь возможность удаленно войти в систему как обычный пользователь на удаленном компьютере, чтобы rsync
работал. Неважно, используете ли вы идентификатор и пароль для входа в систему или настроили ключи SSH для безопасного доступа без пароля, но если вы не можете войти в систему как пользователь, rsync
не будет работать. либо.
Если вы входите в систему с паролем, rsync
запросит у вас пароль. Если вы используете ключи SSH для входа в систему, процесс будет бесшовным.
Единственное, что вам нужно сделать дополнительно, это добавить имя учетной записи пользователя и IP-адрес удаленного компьютера в начало пути к файлу назначения. Используйте знак « @
», чтобы отделить имя пользователя от имени компьютера или IP-адреса, и двоеточие « :
», чтобы отделить имя компьютера или IP-адрес от пути к каталогу.
В нашей тестовой сети эти две команды эквивалентны.
rsync -av /home/dave/geocoder [email protected]:/home/dave/Загрузки
rsync -av /home/dave/geocoder [email protected]:/home/dave/Загрузки
Мы получаем ту же информацию, что и при локальном копировании файлов.
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
, исходным и целевым каталогами совсем несложно запомнить.
Для многих случаев использования это все, что вам нужно. Успокойтесь с этим, а остальное придет легко.
СВЯЗАННЫЕ: Руководство для начинающих по синхронизации данных с помощью Rsync