Alterar todas as permissões de pasta com 1 comando

1

Dentro do meu diretório de aplicativos da Web, como posso alterar todas as minhas permissões de pasta para rwxr-xr-x (755)? E como posso alterar todas as permissões de arquivo para rw-r--r-- (644)? Eu quero mudar todas as pastas e arquivos, incluindo sub-sub arquivos e pastas.

Eu sei que o comando a seguir mudaria todos os arquivos e pastas, mas quero discrimar entre um arquivo e uma pasta.

chmod -R 755 ./my_web_app_project
    
por Jake M 04.03.2017 / 04:38

2 respostas

3

Uma maneira de fazer exatamente o que você quer com um comando find é

find my_web_app_project '(' -type f -exec chmod 644 {} ';' ')' -o '(' -type d -exec chmod 755 {} ';' ')'

-o significa OR. Este comando processa todos os objetos na árvore do projeto que são do tipo “arquivo” ou tipo “diretório”, e executa comandos diferentes com base no tipo de cada objeto.

Você pode tornar isso um pouco mais eficiente substituindo os pontos e vírgulas ( ';' ) por sinais de mais ( + ); isso diz find para executar chmod 644 uma vez, com todos os nomes dos arquivos simples como argumentos, e para executar chmod 755 uma vez, com todos os nomes dos diretórios como argumentos.

A propósito, você não precisa dizer ./ para qualquer coisa diferente de executar um programa no diretório atual (embora ocasionalmente venha a calhar para manipular arquivos cujos nomes começam com alguns caracteres especiais).

Gostaria de saber como são as suas permissões agora (antes de executar um chmod de árvore recursiva). Geralmente, os arquivos não recebem os bits de permissão de execução ativados a menos que eles realmente programas executáveis, ou você acidentalmente fez algo como chmod -R 755 . Os diretórios geralmente não desativam seus bits de permissão de execução a menos que você tenha feito algo catastrófico como chmod -R 644 . Se você errou as permissões porque você fez um chmod -R imprudente com um modo numérico, ignore esta seção e ficar com o comando no início desta resposta.

Mas, se suas permissões são geralmente saudáveis, e você só quer impor um padrão de permissões de leitura / gravação para o usuário, e permissões somente leitura para todos os demais (grupo e mundo), você pode fazer

chmod -R +rX,u+w,go-w my_web_app_project

em que

  • +rX significa +r,+X (observe que X é capitalizado - isso é importante).
    • +r significa definir permissão de leitura para usuário, grupo e outros.
    • +X significa definir permissão de execução para usuário, grupo e outros se estiver atualmente definido para qualquer um deles ou se o objeto for um diretório.
  • u+w significa definir permissão de gravação para o usuário.
  • go-w significa desativar a permissão de gravação para grupos e outros.

Resumo de alguns pontos principais:

  • É claro que você pode chmod apenas as coisas que possui (a menos que você seja privilegiado) e que não sejam somente leitura. Se houver coisas no seu diretório que você não pode chmod , qualquer um desses comandos causará um erro.
  • Os comandos find não farão nada com as coisas que não são diretórios ou arquivos (por exemplo, pipes nomeados).
  • O comando find com -exec chmod 755 {} + pode falhar se você ainda não tiver permissão de leitura e execução em todas as pastas no seu diretório de nível superior.
  • O comando chmod -R +rX,u+w,go-w será
    • define todos os diretórios para o modo 755,
    • ignorar links simbólicos,
    • para todos os outros tipos de arquivo (incluindo, por exemplo, pipes nomeados):
      • defina como 755 se já tiver pelo menos um x bit; caso contrário,
      • defina como 644.
por 04.03.2017 / 06:58
1

Você não pode. Você precisa de dois comandos.

find ./my_web_app_project -type d -exec chmod 755 {} \;
find ./my_web_app_project -type f -exec chmod 644 {} \;

Editar:

Veja a resposta do G-Man, pois é muito mais correto.

    
por 04.03.2017 / 05:22

Tags