- Главная
- Блог
- Без категории
- Rsync в Linux: примеры команд для копирования файлов и синхронизации через SSH
Rsync в Linux: примеры команд для копирования файлов и синхронизации через SSH
Копирование и синхронизация файлов с помощью rsync. Узнайте, как использовать команду rsync в Linux для резервного копирования и передачи данных через защищенное соединение SSH.
Команды:
rsync (remote synchronization - удалённая синхронизация)
rsync -a (archive - архив) - архивный режим
rsync -v (verbose - многословно) - подробный вывод информации о синхронизации
rsync -z (compress - сжатие) - сжатие данных при передаче
rsync -h (human-readable - человекочитаемый формат)
rsync -e - ввод команды для выполнения
rsync --delete - удаление файлов, которых нет в папке назначения
rsync --exclude='*.tmp' (exclude - исключить) - исключить все файлы .tmp
rsync --delete-excluded - удалять исключенные
Еще одна утилита для копирования файлов по сети называется rsync, которая в основном предназначена не просто для копирования, а для выполнения синхронизации файлов как локально, так и между удалёнными системами. Она минимизирует объем передаваемых данных, пересылая только изменённые части файлов, что ускоряет резервное копирование и синхронизацию.
rsync (remote synchronization - удалённая синхронизация)
Так как, чаще всего, данный процесс выполняется между удаленными системами, то давайте попробуем сделать следующее, выполним резервное копирование содержимого рабочего стола пользователя user-ubuntu на сервер ubuntu-srv
Ubuntu Client
rsync (remote synchronization) -a (archive) -v (verbose) -z (compress) -h (human-readable) -e "ssh -p 2222" --delete "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop
-a, --archive — архивный режим. Включает рекурсивное копирование каталогов и сохранение всех атрибутов файлов (права доступа, владельцы, время модификации и пр.).
-v, --verbose — подробный вывод информации о процессе копирования.
-z, --compress — сжатие данных при передаче для экономии трафика.
-h, --human-readable — вывод размера файлов в удобочитаемом формате (Кб, Мб и т.п.).
-e <команда> — указание оболочки или протокола для передачи (например, ssh).
--delete — удаление файлов в папке назначения, которых нет в исходной папке.
rsync -avzh -e "ssh -p 2222" --delete "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop
sending incremental file list
created directory /home/it-skills/user-ubuntu-desktop
Рабочий стол/
Рабочий стол/mtr_report.txt
sent 764 bytes received 97 bytes 156,55 bytes/sec
total size is 3,45K speedup is 4,01
Допустим, мы создали на рабочем столе директорию и переместили в неё наш файл mtr_report.txt, запустим синхронизацию еще раз.
rsync -avzh -e "ssh -p 2222" --delete "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop
sending incremental file list
deleting Рабочий стол/mtr_report.txt
Рабочий стол/
Рабочий стол/Создать папку/
Рабочий стол/Создать папку/mtr_report.txt
В логе говорится, что был удален файл mtr_report.txt, создана директория Создать папку, а в ней файл mtr_report.txt
Давайте создадим на рабочем столе файл 1c.tmp
cd ~/Рабочий стол
touch 1c.tmp
В чем суть, бывает, что нам нужно синхронизировать файлы, но исключить определенные типы файлов, как правило, это как раз связанно с временными файлами, которые помечаются как .tmp, чтобы не засорять файловый сервер. Тогда добавим к команде строку
--exclude='*.tmp' (exclude - исключить)
rsync -avzh -e "ssh -p 2222" --exclude="*.tmp" --delete "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop
Да, мы видим, что файл 1c.tmp не попал к нам на сервер.
Однако, что, если, данный файл уже был на сервере?
rsync -avzh -e "ssh -p 2222" --delete "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop
То выполнив данную команду с исключением, этот файл так же останется на удаленной машине, несмотря на то, что у нас есть ключ --delete
rsync -avzh -e "ssh -p 2222" --exclude="*.tmp" --delete "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop
Но, он не работает с исключениями, для того чтобы удалить исключенный файлы необходимо добавить ключ:
--delete-excluded - удалять исключенные
rsync -avzh -e "ssh -p 2222" --exclude="*.tmp" --delete --delete-excluded "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop
sending incremental file list
deleting Рабочий стол/1c.tmp
Теперь файл, подходящий под правило исключения, был так же удален с удаленной машины. Аналогичным образом, мы можем удалять и директории
rsync -avzh -e "ssh -p 2222" --exclude="*.tmp" --exclude="Создать папку/" --delete --delete-excluded "/home/user-ubuntu/Рабочий стол" it-skills@192.168.0.14:/home/it-skills/user-ubuntu-desktop
sending incremental file list
deleting Рабочий стол/Создать папку/123/234/345/
deleting Рабочий стол/Создать папку/123/234/
deleting Рабочий стол/Создать папку/123/
deleting Рабочий стол/Создать папку/mtr_report.txt
deleting Рабочий стол/Создать папку/
Утилита удалила все вложенные директории и файлы в данной папке, а также и саму папку.
Вот такие интересные приемы с синхронизацией мы можем выполнять.
Таким образом, rsync — универсальный инструмент для администраторов, позволяющий эффективно синхронизировать и выполнять резервное копирование данных с гибкими настройками передачи и исключения файлов, локально или по сети.