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 логин,пароль удалённый.хост