Não é possível chown recursivamente

Não é possível chown recursivamente

Estou usando este comando:

chown root:www-data /var/www/example.com -R 

mas recebo uma mensagem de erro informando que o diretório não está listado.

O que está errado?

Responder1

Você tem que colocar a -Ropção na frente.

chown -R root:www-data /var/www/example.com 

(Eu sempre uso um ponto em vez de dois pontos entre usuário e grupo, mas as páginas de manual dizem que os dois pontos devem ser usados).

Responder2

A versão GNU coreutils do chown, que é padrão no Ubuntu, aceita opções colocadas em qualquer lugar (desde que --não seja usada). Aquilo é:

chown foo:bar some/location -R
chown -R foo:bar some/location

ambos funcionam. Isto é por causa de comogetopt_long()funciona. No meu livro, isso é um bug – pois deveria resultar em erro ou ser documentado, o que pelo que descobri não é.

chown foo:bar some/location -- -R

procuraria o diretório chamado -R.


No entanto, se uma variável de ambiente definida, POSIXLY_CORRECTo primeiro exemplo falharia se não houvesse um diretório chamado -Re nunca seria recursivo.

$ export POSIXLY_CORRECT=
$ chown -v :foo a/ -R
ownership of `a/' retained as foo:foo
chown: cannot access `-R': No such file or directory

IMHO: sempre tente se adequar ao modo POSIX, pois um dia você insere esse comando em outro sistema onde um POSIX é aplicado, quebrando assim.

Observe também que o valor de POSIXLY_CORRECTnão tem efeito. Isso não o desativaria:

export POSIXLY_CORRECT=0
export POSIXLY_CORRECT=no
export POSIXLY_CORRECT=false
export POSIXLY_CORRECT=...

Seria necessário unset.


Pode ser que o seu sistema esteja configurado com outra chownferramenta ou POSIXLY_CORRECTconfigurado.

Conferido por:

export | grep POSIX
chown --version
# etc.

Como observação lateral, o uso de ponto, ., para separar grupo e usuário ficou obsoleto a partir dePOSIX2001( info coreutils 'chown invocation'), mas ainda com suporte para compatibilidade com versões anteriores, embora não seja recomendado.

informação relacionada