Как произвольно отобразить владения пользователей / групп в rsync
Мне нужно rsync каталог на удаленный сервер, чтобы все файлы, принадлежащие пользователю X и группе Y на исходном (локальном) компьютере, были сопоставлены с пользователем W и группой Z на конечном (удаленном) компьютере. Если возможно, используя ssh в качестве транспорта, но если мне нужно использовать демон rsync, то это тоже хорошо.
Есть способ сделать это? Я ищу способ установить произвольную карту пользователя / группы, такую как
local user X => remote user W
local group Y => remote group Z
... and as many of these as needed.
Это должно быть довольно распространенным случаем, не так ли? Например, у меня есть файлы на локальном компьютере, где мое имя пользователя - X, и мне нужно загрузить их на веб-сервер, где они должны принадлежать данному пользователю, который не имеет ни того же имени, ни того же UID, что и мой пользователь на мой персональный компьютер.
Я не могу найти это на справочной странице rsync...
LINUX на локальной и удаленной машине (локальная Ubuntu, удаленная система centOS)
Команда, которую я попробовал: rsync -avz /path/to/local root@myhost.com:/path/to/remote
5 ответов
Rsync версии 3.1.0 представил --usermap
а также --groupmap
варианты именно для этой цели. Смотрите справочную страницу.
Последняя версия (не менее 3.1.1) rsync позволяет указать "удаленное владение":
--usermap=tom:www-data
Смена владельца сайта на www-data (он же PHP/Nginx). Если вы используете Mac в качестве клиента, используйте brew для обновления до последней версии. А на вашем сервере скачайте архивы с источниками, затем "сделайте" это!
Если вы хотите сменить владельца файлов на произвольного пользователя, сначала вам нужно быть суперпользователем в поле назначения.
Я не думаю, что есть такая функция, интегрированная в rsync, но вы можете добиться этого, запустив find
после выполнения вашего rsync.
Может быть, такая команда подойдет: например, перевод с UID 1000 => 505 и UID 1001 => 700:
find /your/rsynced/path -user 1000 -exec chown 505 {} \;
find /your/rsynced/path -user 1001 -exec chown 700 {} \;
Если у вас много пользователей, вы можете рассмотреть возможность использования цикла с отображением на вашем языке пристрастий.
Повеселись.
Как упоминалось в комментариях Федерико и Торка , существует более простой способ для типичного варианта использования, который, я считаю, и был тем, чего хотел ОП. Принятый ответ сопоставляет только указанного пользователя и группу, оставляя все остальные как есть, что может быть неверным. Вам нужно будет добавить резервное сопоставление или сначала проверить право собственности на все на отправляющей стороне. Если это нежелательно и вам просто нужно, чтобы все файлы в месте назначения соответствовали конкретному пользователю и группе, используйте следующее:
--chown=USER:GROUP
Очевидно, заменитьUSER
&GROUP
с фактическим пунктом назначения.
Я не уверен, что понимаю, чтобы подключиться через ssh
Вам необходимо указать имя пользователя. Этим именем пользователя будет пользователь W на удаленной машине, принадлежащий группе Z. Поэтому все будет передаваться именно так, как вы хотите:
rsync /path/to/local userX@remote.com/path/to/remote
РЕДАКТИРОВАТЬ в ответ на комментарий ОП.
Если вы хотите сделать это сопоставление пользователей и не потерять настройки разрешений, не используйте -a
, Сначала запустите rsync с mywww@myhost.com
чтобы получить правильное имя пользователя. Тогда вместо -a
что заставит вас сохранить право собственности, укажите параметры вручную. От man rsync
:
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
-r, --recursive recurse into directories
-l, --links copy symlinks as symlinks
-p, --perms preserve permissions
-t, --times preserve modification times
-g, --group preserve group
-o, --owner preserve owner (super-user only)
-D same as --devices --specials
Так, -a
активирует все вышеперечисленные опции, но вы не хотите сохранять группу или владельца. Эта команда должна делать то, что вы хотите:
rsync -rlptDvz /path/to/local mywww@myhost.com:/path/to/remote
Поскольку вы входите в систему как mywww
и больше не сохранять информацию о владельце / группе, копии, сделанные rsync
будет принадлежать mywww
пользователь.