Синхронизация каталога Rsync linux
Обновлено: 21.11.2024
Rsync означает удаленную синхронизацию. Это метод синхронизации каталогов и файлов, который работает как локально, так и удаленно. Этот инструмент использует «дельта-алгоритм», который уменьшает объем копируемых данных за счет передачи только измененной части файлов или каталогов. В этом посте мы рассмотрим основы использования этого инструмента для синхронизации каталога.
Что такое Rsync?
Rsync – это сетевая утилита, отличающаяся высокой гибкостью в плане синхронизации файлов и каталогов. Он включен в большинство дистрибутивов Unix и Linux как популярная утилита для системных сценариев и широко используется в этих операционных системах.
Теперь давайте рассмотрим основной синтаксис команды rsync.
Синтаксис Rsync:
Здесь «Option» относится к параметрам rsync, «Source» — к исходному каталогу и «Destination» — к целевому каталогу.
Чтобы продемонстрировать вам метод синхронизации каталога в Linux, мы создали в нашей системе два тестовых каталога, «testdir1» и «testdir2».
<р>1. Каталог Rsync локально:
Прежде всего, перечислите все содержимое каталога, чтобы ознакомиться с файлами или папками. Для этой цели мы выбрали «testdir1».
Каталог Rsync с параметром «-r»:
Для прямой синхронизации используйте рекурсивный параметр "-r" в команде rsync. Приведенный ниже синтаксис синхронизирует содержимое из исходного каталога в его целевой каталог. «/» указывает на содержимое исходного каталога. Без этой косой черты команда rsync поместит исходный каталог в каталог назначения.
Запишите эту команду, чтобы начать локальную синхронизацию каталога с другим.
$ rsync -r testdir1 / testdir2
$ ls -al . /testdir2/
Выведите список содержимого «testdir2», чтобы просмотреть изменения, внесенные rsync.
Каталог Rsync с параметром «-a»:
Вы также можете использовать различные параметры или флаги, поддерживаемые rsync. Флаг «-a» — один из них. Этот флаг помогает команде rsync рекурсивно синхронизировать каталог и поддерживать файлы устройства, время модификации, символические ссылки, владельца, группу и права доступа к файлам.
$ rsync -a testdir1 / testdir2
$ ls -al . /testdir2/
Каталог Rsync с параметром «-v»:
Чтобы отобразить процесс rsync на терминале, используется параметр "-v" с командой rsync.
Чтобы проверить разницу, возникающую при использовании "/" в конце исходного каталога, напишите эту команду:
В выводе четко указано, что теперь сам исходный каталог переносится.
Каталог Rsync с параметром «-P»:
«-P» показывает ход синхронизации каталога, отображая индикатор выполнения на терминале.
Ту же команду можно использовать для возобновления прерванной передачи.
Чтобы проверить, синхронизируется ли с помощью той же команды rsync только те изменения, которые мы сделали в каталоге, создайте несколько тестовых файлов в исходном каталоге.
После этого выполните ту же команду rsync и посмотрите на интеллектуальное поведение команды rsync.
<р>2. Каталог Rsync из локальной системы в удаленную:
Операция синхронизации локального каталога с любой удаленной системой известна как "push", так как она передает каталог из вашей локальной системы в удаленную.
Следуйте синтаксису операции push для синхронизации каталога:
В нашем случае мы собираемся синхронизировать каталог «testdir1» с удаленным хостом «10.0.2.15».
<р>3. Каталог Rsync с удаленной системы на локальную:
Как мы все знаем, противоположным слову "выталкивание" является "вытягивание". В контексте синхронизации операция извлечения синхронизирует каталог из удаленной системы в вашу локальную систему.
$ sudo rsync -v имя пользователя @ remote_host: Исходный пункт назначения
$ sudo rsync -v linuxhint @ 10.0.2.15: /home/linuxhint/testdir1/testdir2
Вывод:
Rsync – это инструмент, который может повысить надежность синхронизации локальных каталогов и процесса передачи файлов через удаленные системы. Вы можете использовать команду rsync для создания сложных резервных копий и плавного управления тем, что и как будет синхронизировать каталог. В этом посте мы показали вам различные формы использования rsync, в том числе: каталог rsync в локальной системе, каталог rsync из локальной в удаленную систему, а также из удаленной в локальную.
Об авторе
Талья Саиф Малик
Талья является участником Linux Hint и стремится приносить пользу и делать полезные вещи для всего мира. Он любит читать, писать и говорить о Linux, данных, компьютерах и технологиях.
Rsync, что означает удаленная синхронизация, – это средство удаленной и локальной синхронизации файлов. Он использует алгоритм для минимизации объема копируемых данных путем перемещения только тех частей файлов, которые были изменены.
В этом руководстве мы дадим определение Rsync, рассмотрим синтаксис при использовании rsync , объясним, как использовать Rsync для синхронизации с удаленной системой, а также другие доступные вам параметры.
Предпосылки
Чтобы попрактиковаться в использовании rsync для синхронизации файлов между локальной и удаленной системами, вам потребуются два компьютера, которые будут действовать как локальный компьютер и как удаленный компьютер соответственно. Эти две машины могут быть виртуальными частными серверами, виртуальными машинами, контейнерами или персональными компьютерами, если они правильно настроены.
Если вы планируете следовать этому руководству, используя серверы, было бы разумно настроить их для пользователей с правами администратора и настроить брандмауэр на каждом из них. Чтобы настроить эти серверы, следуйте нашему Руководству по начальной настройке сервера.
Независимо от того, какие типы компьютеров вы используете для выполнения этого руководства, вам необходимо создать ключи SSH на обоих из них. Затем скопируйте открытый ключ каждого сервера в файл author_keys другого сервера, как описано в шаге 2 этого руководства.
Это руководство было проверено на компьютерах с Ubuntu 20.04, хотя в целом оно должно работать на любых компьютерах с операционной системой на основе Linux, на которых установлена rsync.
Определение Rsync
Rsync — это очень гибкий сетевой инструмент синхронизации. Благодаря повсеместному распространению в Linux и Unix-подобных системах, а также популярности в качестве инструмента для системных сценариев, он по умолчанию включен в большинство дистрибутивов Linux.
Понимание синтаксиса Rsync
Синтаксис rsync аналогичен другим инструментам, таким как ssh , scp и cp .
Сначала перейдите в свой домашний каталог, выполнив следующую команду:
Затем создайте тестовый каталог:
Создайте еще один тестовый каталог:
Теперь добавьте несколько тестовых файлов:
Теперь есть каталог dir1 со 100 пустыми файлами. Подтвердите, перечислив файлы:
У вас также есть пустой каталог с именем dir2 . Чтобы синхронизировать содержимое dir1 с dir2 в той же системе, запустите rsync и используйте флаг -r, который означает «рекурсивный» и необходим для синхронизации каталогов:
Еще один вариант — использовать флаг -a, который является комбинированным флагом и означает «архив». Этот флаг рекурсивно синхронизируется и сохраняет символические ссылки, специальные файлы и файлы устройств, время модификации, группы, владельцев и разрешения. Он используется чаще, чем -r, и является рекомендуемым флагом для использования. Запустите ту же команду, что и в предыдущем примере, на этот раз с флагом -a:
Эта косая черта в конце означает содержимое dir1 . Без завершающей косой черты dir1, включая каталог, будет помещен в dir2. В результате будет создана следующая иерархия:
Еще один совет: дважды проверьте аргументы перед выполнением команды rsync. Rsync предоставляет способ сделать это, передав параметры -n или --dry-run. Флаг -v, что означает «подробный», также необходим для получения соответствующего вывода. Вы объедините флаги a , n и v в следующей команде:
Теперь сравните этот вывод с тем, который вы получите при удалении завершающей косой черты, как показано ниже:
Эти выходные данные теперь демонстрируют, что был передан сам каталог, а не только файлы внутри каталога.
Использование Rsync для синхронизации с удаленной системой
Чтобы использовать rsync для синхронизации с удаленной системой, вам нужен только доступ SSH, настроенный между вашим локальным и удаленным компьютерами, а также установленный rsync на обеих системах. После проверки доступа SSH между двумя компьютерами вы можете синхронизировать папку dir1 из предыдущего раздела с удаленным компьютером, используя следующий синтаксис. В этом случае обратите внимание, что вы хотите передать фактический каталог, поэтому косая черта в конце будет опущена:
Этот процесс называется операцией push, потому что он «отправляет» каталог из локальной системы в удаленную систему. Противоположная операция pull используется для синхронизации удаленного каталога с локальной системой. Если бы каталог dir1 находился в удаленной системе, а не в вашей локальной системе, синтаксис был бы следующим:
Как и cp и подобные инструменты, источник всегда является первым аргументом, а место назначения всегда вторым.
Rsync предоставляет множество параметров для изменения поведения утилиты по умолчанию, например параметры флага, о которых вы узнали в предыдущем разделе.
Если вы передаете файлы, которые еще не были сжаты, например текстовые файлы, вы можете уменьшить передачу по сети, добавив сжатие с параметром -z:
Флаг -P также полезен. Он объединяет флаги --progress и --partial. Этот первый флаг обеспечивает индикатор выполнения передачи, а второй флаг позволяет возобновить прерванную передачу:
Если вы запустите команду еще раз, вы получите сокращенный вывод, поскольку никаких изменений не производилось. Это иллюстрирует способность Rsync использовать время модификации, чтобы определить, были ли внесены изменения:
Скажем, вы должны обновить время модификации некоторых файлов с помощью команды, подобной следующей:
Затем, если вы снова запустите rsync с параметром -azP, вы заметите в выводе, как Rsync интеллектуально повторно копирует только измененные файлы:
Чтобы действительно синхронизировать два каталога, необходимо удалять файлы из целевого каталога, если они удаляются из исходного. По умолчанию rsync ничего не удаляет из целевого каталога.
Вы можете изменить это поведение с помощью параметра --delete. Прежде чем использовать этот параметр, вы можете использовать -n , параметр --dry-run, чтобы выполнить тест для предотвращения нежелательной потери данных:
Если вы предпочитаете исключить определенные файлы или каталоги, расположенные внутри каталога, который вы синхронизируете, вы можете сделать это, указав их в списке, разделенном запятыми, после параметра --exclude=:
Если у вас есть указанный шаблон для исключения, вы можете переопределить это исключение для файлов, соответствующих другому шаблону, с помощью параметра --include=:
Наконец, параметр --backup Rsync можно использовать для хранения резервных копий важных файлов. Он используется в сочетании с параметром --backup-dir, который указывает каталог, в котором должны храниться файлы резервных копий:
Заключение
Rsync может упростить передачу файлов по сетевым подключениям и повысить надежность синхронизации локальных каталогов. Гибкость Rsync делает его хорошим вариантом для многих различных операций на уровне файлов.
Мастерство Rsync позволяет разрабатывать сложные операции резервного копирования и получать детальный контроль над тем, как и что передается.
Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!
Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.
Администраторам (или обычным пользователям) часто требуется создавать резервные копии файлов или поддерживать их синхронизацию между несколькими местами (в том числе локальными и удаленными) без переноса и перезаписывания всех файлов на целевом устройстве каждый раз. Один из самых полезных инструментов в арсенале системного администратора для такого рода задач — rsync .
Инструмент rsync может рекурсивно перемещаться по структуре каталогов и обновлять второе расположение любыми новыми/измененными/удаленными файлами. Он проверяет, существуют ли файлы в месте назначения, прежде чем отправлять их, экономя пропускную способность и время для всего, что он пропускает. Кроме того, rsync предоставляет возможность синхронизировать структуру каталогов (или даже один файл) с другим местом назначения, локальным или удаленным. Чтобы сделать это эффективно, по умолчанию он будет проверять время модификации файлов. Он также может выполнять быструю хэш-проверку файлов в источнике и месте назначения, чтобы определить, нужно ли передавать новую копию, что может значительно сэкономить время и пропускную способность.
Поскольку он поставляется в комплекте с большинством дистрибутивов Linux по умолчанию, начать работу с ним должно быть легко. Это также относится к macOS, *BSD и другим Unix-подобным операционным системам. Работать с rsync легко, и его можно использовать в командной строке, в сценариях, а некоторые инструменты обрамляют его в приятный пользовательский интерфейс для управления задачами.
Дополнительные ресурсы по Linux
В командной строке rsync обычно вызывается с использованием нескольких параметров, чтобы определить, как он должен себя вести, поскольку это гибкий инструмент. В своей простейшей форме rsync может гарантировать, что файл в одном месте должен быть таким же во втором месте в файловой системе.
Обычно желательно передать rsync несколько параметров, чтобы убедиться, что все работает так, как ожидает человек. Передача таких параметров, как -a для «архива», довольно распространена, поскольку это «метапараметр», который автоматически вызывает для вас несколько других. -a эквивалентен -rlptgoD, который разбивается на:
- -r : рекурсивно перемещаться по каталогам (в отличие от работы только с файлами в текущем каталоге)
- -l: копировать символические ссылки как новые символические ссылки
- -p : сохранить разрешения
- -t : сохранить время модификации.
- -g : сохранить владение группой
- -o : сохранить право собственности пользователя (которое доступно только суперпользователям при работе с файлами других пользователей)
- -D : копировать файлы устройства
Часто это работает так, как хочет пользователь, и никаких существенных изменений не требуется. Но некоторые из них могут противоречить тому, что нужно пользователю, поэтому правильным ответом может быть разбивка на конкретные функции.
К другим заслуживающим внимания вариантам относятся:
- -n : пробный запуск команды без передачи файлов
- --list-only : показать только список файлов, которые будет передавать rsync
- -P : показать прогресс для каждого файла
- -v : показывать общий прогресс, выводя информацию о каждом файле по мере его завершения.
- -u : пропустить обновление целевых файлов, если они новее исходного.
- -q : Тихий режим. Полезно для включения в сценарии, когда вывод терминала не требуется
- -c : использовать значение контрольной суммы, чтобы определить, какие файлы пропускать, а не время модификации и размер.
- --existing: только обновлять файлы, но не создавать новые отсутствующие
- --files-from=FILE: чтение исходных файлов списка из текстового файла
- --exclude=ШАБЛОН : используйте ШАБЛОН, чтобы исключить файлы из синхронизации.
- --exclude-from=FILE : то же, что и выше, но чтение из файла.
- --include=ШАБЛОН : также используется для отмены правил исключения.
- --include-from=FILE : то же, что и выше, но чтение из файла.
Мой личный набор параметров по умолчанию для rsync оказался -avuP (архивировать, подробный вывод, обновлять только новые файлы и показывать ход выполнения работы).
Источник и цели
Источником и целью синхронизации являются файлы и каталоги. Кроме того, rsync предоставляет функциональные возможности для взаимодействия с удаленными системами через SSH, что избавляет пользователя от необходимости настраивать общие сетевые ресурсы для синхронизации файлов из одного места в другое. Это означает, что вы можете легко создавать сценарии заданий rsync после настройки ключей SSH на обоих концах, избавляя от необходимости вручную входить в систему для удаленной синхронизации файлов.
Rsync или удаленная синхронизация — это бесплатный инструмент командной строки, который позволяет передавать файлы и каталоги в локальные и удаленные места назначения. Rsync используется для зеркалирования, резервного копирования или переноса данных на другие серверы.
Этот быстрый и эффективный инструмент копирует только изменения из исходного кода и предлагает варианты настройки.
Следуйте этому руководству, чтобы узнать, как использовать rsync с 20 примерами команд, которые охватывают большинство случаев использования в Linux.
- Пользователь с правами sudo или root
- Доступ к терминалу/командной строке
- SSH-доступ для примеров удаленной rsync
Синтаксис команды Rsync
Синтаксис команды rsync меняется в зависимости от использования инструмента. Мы рассмотрим все сценарии в следующих примерах. Синтаксис Rsync в самом простом виде выглядит так:
Для удаленной передачи данных необходимо указать адрес хоста, но об этом позже.
Параметры Rsync
Инструмент rsync имеет множество параметров. Вы можете ввести rsync в своем терминале и получить все подробности. Мы перечислим некоторые из наиболее распространенных параметров rsync.
Команда передает файл sample.txt в каталог rsync. Если целевой каталог не существует, добавьте косую черту в конце, и rsync создаст его, как в нашем примере.
Если вы хотите скопировать файл из текущего рабочего каталога, вы можете ввести имя файла, а не полный путь.
2. Копировать несколько файлов локально
Чтобы скопировать несколько файлов с помощью rsync, добавьте полные пути к исходным файлам:
Этот метод следует использовать для небольшого количества файлов. Если список больше, вы можете обратиться к параметру --exclude.
3. Локальное копирование каталога и всех подкаталогов (рекурсивное копирование файлов и каталогов)
Чтобы скопировать каталог и его содержимое в другое место на вашем компьютере, используйте параметр -a или -r. Мы использовали вариант архива:
В приведенном выше примере показано, как скопировать каталог Linux в каталог rsync. Обратите внимание, что мы не использовали завершающую косую черту после Linux. Следовательно, инструмент rsync создал каталог Linux и его содержимое внутри каталога rsync.
4. Скопируйте файл или каталог с локального компьютера на удаленный
Чтобы скопировать каталог /home/test/Desktop/Linux в /home/test/Desktop/rsync на удаленном компьютере, необходимо указать IP-адрес пункта назначения.
Добавьте IP-адрес и пункт назначения после исходного каталога. Не забудьте поставить двоеточие ( : ) после IP-адреса удаленного хоста без пробелов перед пунктом назначения.
Команда выглядит следующим образом:
Введите пароль для текущего пользователя, чтобы продолжить. Если вы хотите использовать другую учетную запись для удаленного подключения, укажите ее перед IP-адресом:
Чтобы скопировать один файл на удаленный хост, укажите полный путь к файлу и место назначения.
5. Скопируйте несколько файлов или каталогов с локального на удаленный компьютер
Подобно локальному копированию данных, перечислите несколько файлов или несколько путей к каталогам, которые вы хотите скопировать на удаленный сервер. Используйте тот же синтаксис, что и при копировании одного файла или каталога.
6. Укажите протокол rsync для удаленной передачи
С помощью параметра -e можно указать инструменту rsync использовать определенный протокол для передачи файлов. Чтобы использовать Rsync через SSH для удаленной передачи файлов, добавьте -e ssh к команде rsync.
Например, чтобы передать файл sample.txt со своего рабочего стола на рабочий стол удаленного компьютера:
7. Скопируйте файл или каталог с удаленного компьютера на локальный
Rsync поддерживает передачу файлов с удаленного сервера на локальный компьютер.
Чтобы получить каталог с сервера, укажите его IP-адрес перед источником.
Эта команда скопировала каталог DirM с адреса 192.168.56.100 в /home/test/Desktop на локальном сервере.
Чтобы скопировать определенный файл с удаленного хоста, введите полный путь к исходному файлу и место назначения на локальном компьютере. Например:
8. Скопируйте несколько файлов или каталогов с локального на удаленный компьютер
Чтобы передать несколько файлов или несколько каталогов с удаленного сервера, укажите пути с помощью фигурных скобок после IP-адреса сервера. Разделяйте пути запятой.
То же самое касается файлов. Укажите в фигурных скобках столько файлов, сколько вам нужно.
9. Показать ход выполнения rsync во время передачи данных
При выполнении резервного копирования больших данных может потребоваться просмотреть ход переноса.
Добавьте флаг --progress к команде rsync, чтобы просмотреть объем переданных данных, скорость передачи и оставшееся время.
Например, чтобы создать резервную копию Dir1 на удаленном сервере и показать ход выполнения, введите:
10. Удалить несуществующий исходный файл или каталог из места назначения
Используйте параметр --delete для синхронизации источника и цели.
Этот параметр указывает rsync удалить любой файл или каталог в месте назначения, если их нет в источнике.
11. Удалить исходные файлы после передачи
В некоторых случаях может потребоваться удалить исходные файлы после переноса. Например, вы можете перемещать еженедельную резервную копию на новый сервер. После переноса вам больше не нужны исходные файлы на старом сервере.
В этом случае используйте флаг --remove-source-files, чтобы удалить указанный исходный файл.
Например, эта команда передает файл резервной копии weekly.zip, а затем удаляет его из источника:
12. Пробный запуск Rsync
Rsync — это мощный инструмент синхронизации.Поскольку этот инструмент позволяет копировать и удалять данные, мы советуем вам сначала выполнить пробный запуск, чтобы проверить, делает ли rsync то, что вы хотели.
Опция пробного запуска особенно полезна, когда вы хотите удалить файлы. Чтобы выполнить пробный запуск, используйте параметр --dry-run и следуйте обычному синтаксису rsync.
Вывод выглядит так же, как при фактической синхронизации файлов. Однако на этот раз данные не будут синхронизированы. Чтобы подтвердить, что проверка имела место, а не фактическая передача, терминал показывает (ПРОБУЙТЕ) внизу.
13. Установить максимальный размер файла для передачи
Чтобы определить максимальный размер файла, который будет передавать rsync, используйте --max-size=add_size .
Например, чтобы передать файлы размером не более 500 КБ, используйте следующую команду:
14. Установить минимальный размер файла для передачи
Используйте --min-size=add_size с rsync, если вы не хотите передавать файлы меньше указанного размера. Этот параметр полезен, например, если вы хотите пропустить небольшие файлы журналов или эскизы.
Чтобы пропустить любой файл размером менее 10 КБ, выполните следующую команду:
15. Установить ограничение пропускной способности rsync
Если вы хотите определить ограничение пропускной способности при передаче данных между компьютерами, используйте --bwlimit=KB/s .
Этот параметр полезен, если вы не хотите засорять пропускную способность сети.
Чтобы установить максимальную скорость передачи 50 КБ/с, введите:
Мы также использовали параметр --progress для демонстрации использования --bwlimit .
16. Копировать определенный тип файла
Вы можете использовать rsync для копирования файлов только определенного типа. Для этого используйте звездочку ( * ) вместо имени файла и добавьте расширение.
Например, чтобы скопировать только файлы .txt, введите:
Эта команда rsync переносит все текстовые файлы из каталога Documents в каталог rsync на вашем рабочем столе.
17. Скопировать структуру каталогов, но пропустить файлы
Rsync позволяет передавать только структуру каталогов, если вам не нужны файлы в другом месте.
Для этого добавьте -f"+ */" -f"- *" перед исходным каталогом.
Например, чтобы скопировать структуру каталога Linux в Документы, введите:
18. Добавить отметку даты к имени каталога
Вы можете легко добавить дату к имени каталога, если хотите ставить отметку даты на свои передачи.
Добавьте $(дата +%Y-%m-%d) к имени целевого каталога, который вы хотите создать. Этот параметр полезен, если вы хотите отслеживать, когда происходила передача, не открывая свойства каталога.
19. Не копировать исходный файл, если тот же конечный файл изменен
Если вы поддерживаете синхронизацию двух каталогов, rsync не копирует файл, если такой же существует в месте назначения.
Иногда может случиться так, что вы изменили файл в месте назначения и не хотите, чтобы rsync перезаписывал его.
Чтобы избежать перезаписи измененных файлов назначения, используйте параметр -u.
20. Показать разницу между исходным и конечным файлами
Когда вы начинаете передачу данных, вы можете использовать флаг -i с rsync, чтобы проверить, есть ли разница между источником и получателем.
Приведенный выше пример показывает, что файл sample2rs.txt отсутствует в месте назначения.
- f – означает файл
- d — показывает, что файл назначения находится под вопросом.
- t – показывает, что отметка времени изменилась.
- s — показывает, что размер изменился
В этом руководстве представлены примеры 20 команд rsync. Если вы будете следовать этому руководству, вы сможете успешно использовать rsync для передачи файлов и каталогов как локально, так и в удаленные места.
Читайте также: