Рубрики
SSH

rsync \ синхронизация каталогов \ файлов

rsync + tar

# В Linux-машине есть возможность сохранить разрешение acl с помощью командных утилит tar и rsync:
# tar --acls -cvpf file.tar file

rsync ключи:
-p  сохранить разрешения
-A  сохранить ACL
-a  режим архива
-v  подробный режим
-z  сжать данные файла во время передачи
--exclude={'dir_name','file_name'} исключаем каталоги dir_name и файлы file_name
--rsync-path="sudo rsync" подымаем rsync права до root
--bwlimit=2048 ограничить скорость передачи

rsync -avzpA --exclude={'proc','dev','lost+found','tmp','run','sys'} --rsync-path="sudo rsync" Имя_хоста_которыйбэкапим:/ /куда.бэкапим


rsync + ssh

Пусть изменяется удалённый каталог, копируем его на локальную машину так:
$ rsync -avz --delete -e ssh логин@удалённый.хост:путь/откуда/ путь/куда

Если же «отражаем» локальный каталог на удалённую машину (выкладываем изменённый сайт на хостинг), то
$ rsync -avz --delete -e ssh путь/откуда/ логин@удалённый.хост:путь/куда

Полезно поиграться с командой добавляя и убирая слэш («/») после названия исходного каталога, чтобы понять, что он делает (или почитать man rsync).
Потренироваться, кстати, можно и с двумя локальными каталогами.

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

rsync:

 
rsync [опции] источник [приемник]
rsync -a /dir1/dir2 /dir3 - будет создана иерархия /dir3/dir2/файлы
rsync -a /dir1/dir2/ /dir3 - будет создана иерархия /dir3/файлы
rsync -a $srv/ $srv:src
rsync -av --delete -e /dir/откуда/ /dir/куда/ - зеркалирование (v-вывод действий)

rsync -avz --rsync-path="sudo rsync" user@host:/tmp/file /tmp - копируем user@host:/tmp/file в каталог /tmp, а параметр "sudo rsync" позволит выполнить от root (пользователь user должен быть в sudo)

rsync --rsync-path="echo  | sudo -Sv && sudo rsync" --archive --acls --xattrs --one-file-system -e "ssh -T -c arcfour -o Compression=no -x" --exclude=".*" --size-only --log-file=/home/backup/rsync.log  remote@server_dns.ru:/home/* /home/backup/

cсинхронизация каталогов ssh+rsync:

rsync -avz --delete -e ssh логин@удалённый.хост:путь/откуда/ путь/куда   - изменяется удалённый каталог, копируем его на локальную машину
rsync -avz --delete -e ssh путь/откуда/ логин@удалённый.хост:путь/куда   - изменяется локальный каталог, копируем его на удаленную машину

rsync еще примеры:

rsync -rogpav --delete /home /tmp - синхронизировать директории /tmp и /home
rsync -az -e ssh --delete ip_addr:/home/public /home/local - синхронизировать локальную и удаленную директории через ssh туннель используя сжатие
rsync -rogpav -e ssh --delete /home ip_address:/tmp - синхронизация через SSH туннель
rsync -az -e ssh --delete /home/local ip_addr:/home/public - синхронизировать удалённую директорию с локальной используя ssh туннель со сжатием

lftp

Всё это хорошо, да вот только доступ по SSH есть далеко не всегда (например, если хостинг дешёвый...). 
Иногда требуется синхронизировать каталоги по FTP. Это умеет программка lftp.
man lftp - получить мануал

Вытянуть каталог с удалённого сервера (синхронизировать локальный каталог с удалённым):
$ lftp -e 'mirror -e каталог-на-сервере локальный-каталог; bye;' -u логин,пароль удалённый.хост

И наоборот, выложить локальный каталог на удалённый сервер:
$ lftp -e 'mirror -R локальный-каталог каталог-на-сервере; bye;' -u логин,пароль удалённый.хост