Ubuntu Linux: Копирование разрешений файлов/папок с одной машины на другую

Вы можете создать здесь-документ, который записывается во временный файл и затем обрабатывается. Временный файл будет автоматически удален, поэтому ручная очистка не требуется.

#!/bin/bash
mylist=/var/tmp/$$
trap 'rm -f ${mylist}' EXIT
cat << _EOF_ > ${mylist}
name1 url1
name2 url2
name3,url3
_EOF_
while read name url
do
    printf "%s %s\n" ${name} ${url}
done < ${mylist}
1
09.02.2016, 13:39
3 ответа

Запуск от имени пользователя root rsync -og , возможно, это то, что вы ищете.

Из справочной страницы:

-o, --owner
              This option causes rsync to set the owner of the destination file to be the same as the source file, but only if the receiving rsync is being run as the super-user (see also the --super and --fake-super options).  Without this option,  the  owner  of
              new and/or transferred files are set to the invoking user on the receiving side.

              The preservation of ownership will associate matching names by default, but may fall back to using the ID number in some circumstances (see also the --numeric-ids option for a full discussion).

       -g, --group
              This option causes rsync to set the group of the destination file to be the same as the source file.  If the receiving program is not running as the super-user (or if --no-super was specified), only groups that the invoking user on the receiving side
              is a member of will be preserved.  Without this option, the group is set to the default group of the invoking user on the receiving side.

              The preservation of group information will associate matching names by default, but may fall back to using the ID number in some circumstances (see also the --numeric-ids option for a full discussion).
0
27.01.2020, 23:26

Вероятно, вы захотите использовать rsync . Чтобы это работало, вам необходимо установить его на обоих машинах (если он еще не установлен). После этого просто запустите (как root):

rsync -avrHP root@source-host:/path/to/source-directory/ /path/to/destination

это предполагает, что:

  • Вы запускаете команду на целевом хосте. Если вы хотите запустить его на исходном хосте, просто удалите часть root @ source-host: из первого аргумента и добавьте аргумент root @ destination-host: в аргумент второй. Примечание: невозможно запустить rsync с двумя удаленными хостами; только один из концов может быть «удаленным» концом.
  • Вход по ssh как root возможен. В наши дни обычным делом является отключение такого доступа из соображений безопасности. Однако для того, чтобы rsync мог действительно копировать разрешения, он должен запускаться с правами root на обоих концах. Если он отключен, проверьте / etc / ssh / sshd_config и найдите PermitRootLogin . Если он установлен на нет , переключите его на да и перезапустите sshd . Не забудьте снова отключить его после копирования файлов!
  • Все пользователи, владеющие файлами на исходном хосте, существуют на целевом хосте. В противном случае некоторые биты разрешений могут быть скопированы неправильно.

Обратите внимание, что вам не не нужно сначала удалять уже скопированные файлы. Rsync обнаружит, что файлы существуют, но синхронизирует разрешения.Если есть файлы, которые были изменены с момента копирования, rsync также синхронизирует их содержимое.

1
27.01.2020, 23:26

В Linux вы можете создавать резервные копии и восстанавливать права собственности и разрешения (включая списки контроля доступа, но не контексты SELinux) с помощью инструментов ACL. Запустите getfacl -R >permissions.txt в каталоге toplevel на машине с правильными разрешениями. Скопируйте выходной файл на целевую машину и запустите setfacl --restore=permissions.txt в целевом каталоге toplevel.

Если вам нужно скопировать права собственности, а также разрешения, вам нужно будет выполнить часть восстановления от имени root.

2
27.01.2020, 23:26

Теги

Похожие вопросы