|
Certo, hora do "go live". Temos que garantir que todos os arquivos estejam com as permissões corretas. Ocorre que para todos eles é a mesma máscara, por exemplo, 644. MAS... não podemos fazer um "chmod -R" porque os tais dos diretórios precisam de uma permissão diferente, que é 755. Droga, por pouco não é? Quem usa Joomla sabe de onde tirei esse exemplo. :)
Pois bem, seus "pobrema" acabaram. Com um comandinho simples, podemos alterar as permissões de todos os arquivos recursivamente a partir do ponto da árvore de diretório onde estamos. E SÓ dos arquivos, ou dos arquivos apenas, como queira.
Com outro comando, alteramos, também recursivamente, as permissões de todos os diretórios, sem tocar nas máscaras dos arquivos.
São eles!
Para os arquivos:
find . -type f -print | xargs -n 1 chmod 666
O find é o comando que procura objetos do tipo especificado no parâmetro -type f, ou seja, "f" de file, que é arquivo em Inglês. Esse comando retorna os nomes dos objetos, pois é instruído para isso com o parâmetro -print. Mas, ao invés de ir para a tela, o uso do pipe (|) direciona essa saída para outro comando, o xargs.
O xargs é muito legal. Ele pega o que recebe do pipe e transforma em argumento para outro comando, que é especificado a seguir, o chmod. Esse último é que realmente altera a permissão do arquivo para 666. O -n 1 do xargs diz para ele executar o seu comando (chmod) para cada entrada recebida do pipe. Se for maior que 1, ele "enfileira" vários nomes de objetos e os passa de uma vez para o comando, como se fossem vários argumentos.
Vamos ver na vera. Digamos que o find ache o diretório chamado dirA e dirB. Então ele passa isso pro xargs que, pra cada um deles, executa o chmod. Assim, desse jeito: "chmod 666 dirA" e depois "chmod 666 dirB".
Se você tiver error de permissão, pode tentar do modo abaixo:
find . -type f -print | sudo xargs -n 1 chmod 666
Com o sudo incluído, o xargs vai executar como root. É claro que o sistema irá pedir a senha pra isso.
Agora, para fazer a alteração de permissões dos diretórios, usamos uma variação da mesma linha de comandos. Alteramos apenas o tipo de objeto que o find deve procurar, para -type d. Você já deve ter adivinhado que d é de directory.
find . -type d -print | xargs -n 1 chmod 755
Vale também pra eles a variação com o sudo:
|