Разрешения, как правило, не распространяются в каталог, в который копируются файлы, скорее новые права контролируются пользователем umask
. Однако, когда вы копируете файл из одного места в другое, это особый случай, когда пользователь по umask
существу игнорируется и существующие права на файл сохраняются. Понимание этой концепции - ключ к получению того, что вы хотите.
Таким образом, чтобы скопировать файл, но «отбросить» его текущие разрешения, вы можете сказать cp
«не сохранять» с помощью --no-preserve=all
переключателя.
пример
Скажем, у меня есть следующий файл, как вы.
$ mkdir -m 744 somedir
$ touch afile
$ chmod 400 afile
$ ll
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
И, как вы уже убедились, если мы просто слепо копируем его, cp
мы получим следующее:
$ cp afile somedir/
$ ls -l somedir/
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
Теперь давайте повторим это, но на этот раз скажем cp
«сбросить разрешения»:
$ rm -f somedir/afile
$ cp --no-preserve=all afile somedir/
$ ls -l somedir/
total 0
-rw-rw-r--. 1 saml saml 0 Feb 14 15:21 afile
Итак, скопированный файл теперь имеет свои права доступа 664, где он их взял?
$ umask
0002
Если я изменил свое значение umask
на что-то другое, мы можем повторить этот тест в третий раз и посмотреть, какое влияние это umask
окажет на незафиксированное cp
:
$ umask 037
$ rm somedir/afile
$ cp --no-preserve=all afile somedir/
$ ls -l somedir/
total 0
-rw-r-----. 1 saml saml 0 Feb 14 15:29 afile
Обратите внимание, что разрешения больше не 664, а 640? Это было продиктовано umask
. Он говорил любым командам, которые создают файл, чтобы отключить нижние 5 бит в разрешениях ... эти парни: ( ----wxrwx
).
setfacl
команду вы пробовали? Каков был его выход?