rsync + tar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# В 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
1 2 3 4 5 6 7 8 9 10 |
Пусть изменяется удалённый каталог, копируем его на локальную машину так: $ rsync -avz --delete -e ssh логин@удалённый.хост:путь/откуда/ путь/куда Если же «отражаем» локальный каталог на удалённую машину (выкладываем изменённый сайт на хостинг), то $ rsync -avz --delete -e ssh путь/откуда/ логин@удалённый.хост:путь/куда Полезно поиграться с командой добавляя и убирая слэш («/») после названия исходного каталога, чтобы понять, что он делает (или почитать man rsync). Потренироваться, кстати, можно и с двумя локальными каталогами. Если удалять файлы, исчезнувшие в исходном каталоге, но присутствующие в целевом не нужно, то ключ "--delete" нужно убрать. |
rsync:
1 2 3 4 5 6 7 8 9 |
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 <PASSWORD> | 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:
1 2 |
rsync -avz --delete -e ssh логин@удалённый.хост:путь/откуда/ путь/куда - изменяется удалённый каталог, копируем его на локальную машину rsync -avz --delete -e ssh путь/откуда/ логин@удалённый.хост:путь/куда - изменяется локальный каталог, копируем его на удаленную машину |
rsync еще примеры:
1 2 3 4 |
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
1 2 3 4 5 6 7 8 9 |
Всё это хорошо, да вот только доступ по SSH есть далеко не всегда (например, если хостинг дешёвый...). Иногда требуется синхронизировать каталоги по FTP. Это умеет программка lftp. man lftp - получить мануал Вытянуть каталог с удалённого сервера (синхронизировать локальный каталог с удалённым): $ lftp -e 'mirror -e каталог-на-сервере локальный-каталог; bye;' -u логин,пароль удалённый.хост И наоборот, выложить локальный каталог на удалённый сервер: $ lftp -e 'mirror -R локальный-каталог каталог-на-сервере; bye;' -u логин,пароль удалённый.хост |