Мне нужен хороший способ синхронизации каталога между моим ноутбуком OSX 10.6 и моим рабочим столом Ubuntu. Dropbox, очевидно, был бы отличным выбором, однако каталог, который мне нужно синхронизировать, принадлежит пользователю root на обеих машинах, и исправление разрешений испортит ситуацию, в которой я собираюсь. Я думал просто написать свой собственный сценарий с использованием rsync (что было бы действительно интересно), но мне интересно, может быть, есть что-то более надежное. Я слышал об Unison, но мало о нем знаю. Подойдет ли это для меня, или вы можете придумать что-нибудь получше? Спасибо!
два простых ответа (и то же, что вы уже упомянули):
Унисон, если вы хотите что-то, что «просто работает». Имеет приятный графический интерфейс, и вы можете легко определить задачу и вызвать ее из командной строки, скрипта, cron
, без разницы. Я использую его для синхронизации моего ноутбука и моей жены с соответствующими пользовательскими каталогами на рабочем столе. Это действительно так просто.
rsync
если вы хотите контролировать (почти) каждый аспект. Существует множество аргументов, которые позволяют уважать, изменять или уничтожать разрешения, ответы по номеру или имени и т. Д. На самом деле, редко возникает необходимость в полном сценарии; обычно вам нужно только найти (методом проб и ошибок) наилучшее сочетание аргументов.
Unison - хорошее решение, если вам нужно выполнить двустороннюю синхронизацию и вы хотите иметь возможность разрешать конфликты вручную. Он записывает, что было синхронизировано в последний раз, поэтому он знает, был ли файл изменен в обе заканчивается.
Если вам нужно чисто фоновое решение, которое происходит автоматически (например, из cron
) и имеет чисто одностороннюю синхронизацию, rsync
может быть лучше. Unison хранит исчерпывающие метаданные (в ~/.unison
), который вам не нужен, если вы выполняете одностороннюю синхронизацию.
Тот факт, что оба конца принадлежат root, значительно усложняет ситуацию независимо от того, используете ли вы rsync
или Унисон. Вам нужно будет использовать sudo
в пункте назначения, чтобы получить доступ для записи, но вы не хотите ssh
-входим в источник как root. При условии, что исходный код доступен для чтения всем, вы можете сделать это, запустив sudo rsync
в месте назначения и указав явного пользователя без полномочий root для источника (user@host:...
). Обратите внимание, что вы можете использовать аутентификацию с открытым ключом и настроить authorized_keys
файл так, чтобы только rsync
можно использовать с этим ключом.
В одной ситуации я решил это, экспортировав весь каталог с rsync
демон, тем самым разрешая анонимный доступ. Это, очевидно, обходит разрешения, но моей реальной потребностью было создать определенный набор прав собственности и разрешений на принимающей стороне, а не защищать исходную сторону.