chown -R root: root. * em / root executa chown em /

0

Ao executar o comando no título from / root, ele de alguma forma salta para / e altera a propriedade para ALLfiles, eu só notei porque mensagens de erro para / proc apareceram.

Talvez eu esteja ficando velho, mas deveria. e .. não ser ignorado por algum comando? AFAIK estes estão lá por causa do sistema de arquivos e não servem a nenhum outro propósito.

executando o Debian Wheezy com as últimas atualizações aplicadas.

    
por J.Lambrecht 09.05.2015 / 15:58

2 respostas

4

Maybe i'm getting old but should . and .. not be ignored by any command ? AFAIK these are there because of the filesystem and serve no other purpose.

Isso não faria sentido, simplesmente porque você especificamente forneceu os nomes . e .. para o seu chown <...> .* . Nesse caso, por que chown acha que você não fez o que queria fazer?

Os nomes foram alimentados para chown porque o shell os expandiu com base nos critérios de expansão de globalização de concha que você forneceu, que correspondiam a . e .. junto com todos os outros diretórios de pontos no diretório atual. Como você disse a chown para trabalhar recursivamente, ele desceu para esses diretórios e para qualquer coisa abaixo deles. Isso significa que "desceu para" .. e continuou trabalhando a partir daí.

Você mesmo pode tentar isso fazendo echo .* para ver os nomes que foram inseridos na linha de comando do chown. Compare isso com a saída de echo * com shopt dotglob ativado e desativado, respectivamente ( shopt -s dotglob para ativar, shopt -u dotglob para desativar). Use ls em vez de echo para ver o primeiro nível de recursão.

Existem razões perfeitamente válidas para executar até chown -R em . ou .. . O mais óbvio parece ser extrair um arquivo que possua informações de propriedade incorretas em arquivos e todos os arquivos em um único diretório; Nesse caso, chown -R abc:xyz . de dentro do diretório descompactado é uma coisa perfeitamente razoável, para redefinir a propriedade para algo razoável em seu sistema.

Se você quiser que seu shell não expanda .* em . e .. , será necessário verificar se ele está configurado corretamente para o seu shell específico. Por exemplo, citando a página man do GNU bash 4.2.37 (1) -release (atual no Debian Wheezy no momento em que este texto foi escrito, Debian bash versão do pacote 4.2+dfsg-0.1+deb7u3 na arquitetura amd64):

GLOBIGNORE
A colon-separated list of patterns defining the set of file names to be ignored by pathname expansion. If a filename matched by a pathname expansion pattern also matches one of the patterns in GLOBIGNORE, it is removed from the list of matches.

Lembre-se de que parte da filosofia Unix é "confiar que o usuário sabe o que está fazendo".

    
por 09.05.2015 / 16:16
1
  1. O ponto (.) não pode ser ignorado porque é o diretório atual
  2. O ponto duplo (..) (diretório superior) não será ignorado porque mach o curinga

Mas se você executar desta forma, você não terá esse efeito

chown -R root:root *

Se você quiser alterar apenas arquivos ocultos, use os diretórios para tentar:

find . -regex '.*/\..*' -exec chown root:root {} \;
    
por 09.05.2015 / 16:01