Использование команды rsync для синхронизации файлов и каталогов [11 Examples]

Использование команды rsync для синхронизации файлов и каталогов [11 Examples]

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

Это делает его очень полезным для переноса данных, резервного копирования и зеркалирования, что делает его идеальным для веб-мастеров и администраторов для повторяющихся задач по передаче данных.

Эта статья расскажет нам, как работает Risnc, и даст несколько полезных примеров.

Как работает rsync?

rsync — это утилита командной строки удаленной синхронизации для Unix-подобных систем. Это дает пользователю возможность беспрепятственно передавать/синхронизировать файлы между машинами или двумя хостами.

Под капотом rsync использует алгоритм дельта-передачи. Этот алгоритм включает копирование различий между двумя файлами на двух хостах (исходном и целевом). Источник и место назначения могут быть локальными или удаленными. Команда rsync может выполнять задачи копирования/синхронизации данных двумя способами. Являются:

  • Используйте ssh, rsh для копирования/синхронизации между двумя хостами.
  • Используйте демон TCP rsync для копирования/синхронизации.

Поскольку он предназначен для работы в Unix-подобных системах, он также работает в Linux.

Пошаговый процесс, используемый rsync, выглядит следующим образом:

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

Если команда rsync не найдет файл на удаленном компьютере, но не на хосте, она скопирует и передаст его в хост-систему. Точно так же для уже существующих файлов (как на хосте, так и на удалении) будет скопировано различие между ними (т.е. измененные части). Наконец, он будет игнорировать существующие файлы в обеих системах без изменений.

Команда rsinc выполняет добавочные обновления, сохраняя разницу во временном файле перед его отправкой в ​​место назначения.

Прежде чем ты начнешь:

  • У вас должны быть привилегии root или sudo
  • Иметь доступ к терминалу/командной строке
  • SSH-доступ для безопасного выполнения команд rsync
  • Вам также нужны две машины для выполнения rsync.

Для обучения мы будем использовать Linux Mint 21.1 Vera. Вы можете без проблем следовать этому руководству, используя любой другой дистрибутив Linux.

Зачем использовать rsync вместо Scp?

Scp (secure copy) — популярный протокол командной строки, который позволяет пользователям копировать файлы. Ниже приведен линейный подход к копированию. Это означает, что он просто копирует файлы из источника в место назначения. Чтобы сделать это безопасно, используйте SSH.

Синтаксис команды scp следующий:

scp option SOURCE DESTINATION

Однако остается вопрос, зачем использовать rsync вместо scp?

Ну, есть несколько преимуществ использования rsync. Эти преимущества включают в себя:

  • Более быстрое выполнение: rsync работает быстрее, чем scp, поскольку использует протокол удаленного обновления. Это позволяет передавать только различия, а не весь файл. Так что, если вы настроили регулярную синхронизацию со временем, вам нужно будет только сделать полную копию в первый раз. Начиная со следующего раза, он просто копирует обновленные части, используя алгоритм дельта-переноса.
  • Меньшее потребление полосы пропускания: поскольку rsync не нужно снова копировать весь файл, это приводит к меньшему потреблению полосы пропускания. Кроме того, он также использует алгоритмы сжатия/распаковки для минимизации размера файла во время передачи.
  • Дополнительные параметры командной строки: rsync также превосходит scp по количеству параметров командной строки. Это означает, что вы можете настроить rsync лучше, чем scp.

В заключение, rsync — отличный инструмент для инкрементной синхронизации. Инструмент scp также полезен для безопасной передачи/синхронизации файлов. В реальном сценарии scp подходит для повседневных задач, если вы ищете более простой подход. Однако для повторяющихся задач используйте rsync.

Синтаксис команды rsync

Команда rsync выглядит следующим образом:

Здесь термины определены ниже:

  • ВАРИАНТ — это параметры rsync
  • ИСТОЧНИК – Исходный каталог
  • DEST – каталог назначения
  • ПОЛЬЗОВАТЕЛЬ – удаленное имя пользователя
  • HOST — удаленное имя хоста или IP-адрес

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

Другие параметры rsync включают:

  • -z: сжать данные для экономии места
  • -h: обеспечивает вывод в удобочитаемом формате
  • -b: делает резервную копию в процессе синхронизации данных
  • -e: использовать протокол SSH для удаленной передачи данных
  • -progress: показывает ход синхронизации данных
  • -v: попросить rsync отобразить подробный вывод
  • –n: выполнить сухую перезагрузку для проверки настроек и настройки синхронизации данных.
  • -k: подавить вывод и параметры команды rsync

Установка rsync

Большинство систем Unix и Linux поставляются с установленным rsync. Если в вашей системе нет rsync, вы можете установить его с помощью следующих команд.

Для Debian/Ubuntu и Mint

sudo apt-get install rsync

Для Arch Linux

pacman -S rsync

Он Генту

emerge sys-apps/rsync

В CentOS/Fedora/REHL

sudo yum install rsync

На openSUSE

sudo zypper install rsync

Поскольку у нас Linux Mint, rsync предустановлен. Таким образом, вы можете запустить команду rsync в терминале, чтобы увидеть, установлена ​​ли она. Он объяснит его возможности, варианты и другую важную информацию, если она присутствует.

nitt ~
$ rsync
rsync  version 3.2.3  protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
    batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
    symtimes, prealloc, stop-at, no crtimes
Optimizations:
    SIMD, no asm, openssl-crypto
Checksum list:
    xxh128 xxh3 xxh64 (xxhash) md5 md4 none
Compress list:
    zstd lz4 zlibx zlib none

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.

Теперь давайте посмотрим на rsync в действии с различными вариантами использования.

Для урока мы создадим два каталога.

  • исходный каталог
  • каталог назначения

Для этого вам нужно ввести следующие команды.

mkdir source-directory
mkdir dest-directory

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

touch source-directory/file{1..100}

Это создает 100 пустых файлов в исходном каталоге. Вы можете подтвердить это, введя команду ниже.

ls source-directory
Output:
nitt rsync-tutorial
$ ls
dest-directory  source-directory
nitt rsync-tutorial
$ touch source-directory/file{1..100}
nitt rsync-tutorial
$ ls source-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

Примечание. Мы оставили каталог dest пустым.

Копировать каталоги рекурсивно локально

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

В этом случае мы будем использовать следующий синтаксис rsync.

опция rsinc ИСТОЧНИК НАЗНАЧЕНИЕ

Скопируйте файлы из нашего исходного каталога в целевой каталог, выполнив следующую команду.

rsync -r source-directory/ dest-directory

Здесь команда «рекурсивно» копирует файлы из исходного каталога в целевой каталог.

nitt rsync-tutorial
$ ls
dest-directory  source-directory
nitt rsync-tutorial
$ ls dest-directory
nitt rsync-tutorial
$ ls source-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99
nitt rsync-tutorial
$ rsync -r source-directory/ dest-directory
nitt rsync-tutorial
$ ls dest-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

Это копирует каждый отдельный файл из исходного каталога в целевой каталог.

Скопируйте один файл локально

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

Для этого мы отредактируем пустой файл file1 в исходном каталоге, а затем синхронизируем его с тем же файлом, расположенным в целевом каталоге.

Чтобы отредактировать файл, введите следующую команду.

nano source-directory/file1

Теперь скопируйте и вставьте следующий текст в редактор nano.

We're updating file1 in the source-directory.
Once we update, we'll push the new update to the dest-directory.
rsync doesn't need to re-copy the file using the delta-transfer algorithm.
This algorithm checks the differences and then updates destination files
accordingly.
So, once you save file1 in the source-directory, open file1 in
the dest-directory. It'll be empty.
However, if we check it after running rsync, you'll see that file1 in dest-directory
is updated.

Добавление содержимого в файл

Теперь закройте и сохраните файл.

Теперь давайте скопируем файл с помощью rsync.

sudo rsync -v --existing source-directory/file1 /dest-directory
#Output
nitt rsync-tutorial
$ sudo rsync -v --existing source-directory/file1 dest-directory
file1

sent 557 bytes  received 35 bytes  1,184.00 bytes/sec
total size is 474  speedup is 0.80

nitt rsync-tutorial
$ 

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

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

rsync -v source-directory/newfile dest-directory
#Output
nitt rsync-tutorial
$ rsync -v source-directory/newfile dest-directory
newfile

sent 82 bytes  received 35 bytes  234.00 bytes/sec
total size is 0  speedup is 0.00

Копирование нескольких файлов

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

Для этого мы создадим два новых файла: nevfile2 и nevfile3 в исходном каталоге. Для этого выполните следующую команду.

touch source-directory/newfile{2..3}

Теперь используйте следующую команду для синхронизации нескольких файлов.

rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
#Output
nitt rsync-tutorial
$ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
newfile2
newfile3

sent 135 bytes  received 54 bytes  378.00 bytes/sec
total size is 0  speedup is 0.00
nitt rsync-tutorial
$ 

Скопируйте файл или каталог с локального на удаленный

Ниже приведен синтаксис rsync для передачи с локального на удаленный.

rsync option SOURCE [email protected]:DEST

Как видите, для этого вам нужно знать IP-адрес удаленной машины. Кроме того, вам необходимо добавить IP-адрес после исходного файла.

rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Перед началом передачи он запросит пароль. Введите его, чтобы продолжить. Кроме того, если пользователь на удаленной машине отличается, вам необходимо указать его перед IP-адресом, за которым следует @.

rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory

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

rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Протоколы, специфичные для удаленной передачи

rsync позволяет указать определенные протоколы передачи файлов. Для этого вам нужно использовать опцию -e, за которой следует протокол.

Например, если вы хотите использовать протокол ssh, вы должны добавить -e ssh к команде rsync.

rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Копирование файла или каталога с удаленного на локальный

Ниже приведен синтаксис rsync для передачи с локального на удаленный.

sync option [email protected]:SRC DEST

Это действует как запрос на извлечение. Итак, чтобы получить необходимые файлы/каталог с удаленного сервера на локальный компьютер, вам нужно выполнить следующую команду.

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Команда извлекает файлы из целевого каталога удаленного компьютера в исходный каталог локального компьютера.

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

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory

Чтобы скопировать несколько файлов или каталогов с локального на удаленный, вам необходимо указать путь в фигурных скобках (через запятую) после IP-адреса сервера.

rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory

Точно так же вы также можете упомянуть файлы.

Показывать живой прогресс во время передачи

Это хорошая идея, чтобы увидеть прогресс в реальном времени для больших резервных копий данных. Для этого вам нужно использовать тег –progress. Добавьте его в команду rsync, и вы увидите скорость передачи, оставшееся время и объем переданных данных.

rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Удалите исходные файлы после завершения передачи

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

rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

сухая загрузка rsync

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

Вы должны использовать опцию –dry-run для пробного прогона. Добавьте его в команду, за которой следует источник и пункт назначения.

sudo rsync -v --dry-run source-directory/file1 dest-directory
nitt rsync-tutorial
$ sudo rsync -v --dry-run source-directory/file1 dest-directory
file1

sent 43 bytes  received 19 bytes  124.00 bytes/sec
total size is 474  speedup is 7.65 (DRY RUN)
nitt rsync-tutorial

Вывод аналогичен тому, как мы запускали его ранее. Однако вы заметите упоминание (DRI RUN) в конце вывода.

Установите минимальный и максимальный размер файла

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

Поэтому, если вы хотите загрузить файл с минимальным размером 15 КБ, вам нужно использовать –min-size=15 КБ.

rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Команда будет копировать только файлы с минимальным размером файла 15 КБ. Если размер файла меньше, он будет проигнорирован.

Точно так же вы можете использовать флаг –max-size, чтобы установить максимальный размер файла.

rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Здесь rsync будет игнорировать файлы размером более 450 КБ.

Установить ограничение пропускной способности

Если вы выполняете другие задачи, требующие большой пропускной способности, вы можете установить risnc, чтобы установить ограничение пропускной способности для передачи. Для этого используйте –bvlimit=KB/s.

rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Здесь мы устанавливаем пропускную способность 100 Кб/с во время передачи.

Заключительные слова

Это подводит нас к концу нашего руководства по командам rsync. Мы научились использовать risnc и эффективно рассмотрели множество команд.

Однако risnc предлагает гораздо больше, чем мы рассмотрели. Поэтому вы можете просмотреть справочную страницу rsync, где описываются все аспекты rsync.

Тогда ознакомьтесь с читами командной строки для Windows, Linux и macOS.

Поделиться в соцсетях