Como posso recursivamente alterar as permissões de arquivos e diretórios?

58

Eu tenho o Ubuntu instalado no meu computador local com o apache / php / mysql.

Agora tenho um diretório em / var / www - dentro do qual tenho vários dos meus projetos em andamento. Eu também trabalho com opensource (drupal, magento, sugarcrm).

O problema que enfrento está mudando a permissão de arquivo com o terminal. Às vezes preciso alterar a permissão da pasta inteira e de suas subpastas e arquivos subsequentes. Eu tenho que mudar individualmente usando

sudo chmod 777 foldername

Como posso fazer isso de forma recursiva?

Também por que eu sempre tenho que fazer 777 , eu tentei 755 para pastas e 644 para arquivos, mas isso não trabalho.

    
por Nikhil 16.03.2011 / 15:45

5 respostas

80

Basta adicionar a opção -R para alterar de forma recursiva as permissões dos arquivos. Um exemplo, adiciona recursivamente permissões de leitura e gravação para o proprietário e grupo em foldername :

chmod -R ug+rw foldername

As permissões serão como 664 ou 775.

Definir as permissões para o 777 é altamente desencorajado . Você recebe erros no Apache ou no seu editor em relação às permissões, porque o apache é executado sob um usuário diferente ( www-data ) do que você.

Se você quiser gravar em /var/www , adicione-se ao grupo www-data e defina as permissões umask + de acordo.

  • Adicione-se ao grupo www-data : sudo adduser $USER www-data
  • Alterar a propriedade dos arquivos em /var/www : sudo chown -R www-data:www-data /var/www
  • Altere o umask, portanto, os arquivos recém-criados pelo Apache também concedem permissões de gravação ao grupo. Adicione umask 007 a /etc/apache2/envvars .
  • Conceda a você mesmo (tecnicamente, o grupo www-data ) permissões de gravação: sudo chmod -R g+w /var/www .
por Lekensteyn 16.03.2011 / 16:06
20

bruteforce:

sudo find foldername -exec chmod a+rwx {} ";"

O que não funciona? Seja mais específico!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"
    
por user unknown 16.03.2011 / 16:05
4

Você não deve precisar do 777 para nada. Na pior das hipóteses, você precisará alterar o proprietário de certos arquivos e diretórios para o usuário "www-data".

sudo find /var/www -type d -print0 | xargs -0 chmod 755
sudo find /var/www -type f -print0 | xargs -0 chmod 644
sudo find /var/www/some/subset -print0 | xargs -0 chown www-data:www-data

Se você estiver usando o método de participação em grupo do Lekensteyn, altere 755 para 775 e 644 para 664, respectivamente, e force a rigidez do grupo:

sudo find /var/www/some/subset -type d -print0 | xargs -0 chmod g+s
    
por Kees Cook 17.03.2011 / 08:02
3

Você pode alterar as subpastas e arquivos no Nautilus. Como você pode ver na imagem abaixo. Para ter as permissons nos botões, você pode habilitar a opção no Ubuntu Tweak.

    
por Alfredo Hernández 16.03.2011 / 16:12
0

Se você quiser que todos os seus arquivos sejam legíveis para o mundo (ou seja, é apenas um conjunto estático de arquivos / imagens HTML), use este comando:

chmod -R a+r <base directory>

Isso irá recursivamente passar por todos os arquivos & amp; subdiretórios e adicionar permissão de leitura a eles.

AVISO : não faça isso para o código que é executado! Apenas arquivos que devem ser visíveis por todos.

    
por Ryan Shillington 26.01.2015 / 18:46