Altere todas as permissões de arquivos e pastas de um diretório para 644/755


184

Como eu alteraria todos os arquivos para 644 e todas as pastas para 755 usando chmodno linuxprompt de comando? (Terminal)


6
Se alguém (@animuson) seria tão amável para me explicar, por que esta pergunta chmod é off-topic e todos os outros (14,438 resultados) aqui não são ...
— hugo der hungrige

Pouco tarde, mas este comando também irá fazer a resposta aceita em um tiro: chmod -R a = r, a + X, u + w / o / path
— MichaelICE

Boa pergunta, não merece fechamento. Eles devem ser movidos para um subsite de stackoverflow em vez de fechados.
— Erik Friesen

1
@hugoderhungrige significa ir perguntar em um site do servidor como http://superuser.com:: P, mas esta pergunta me ajudou aqui, obrigado.
— emotality 02/02

Respostas:


345

Uma abordagem poderia estar usando find:

para diretórios

find /desired_location -type d -print0 | xargs -0 chmod 0755

para arquivos

find /desired_location -type f -print0 | xargs -0 chmod 0644

21
apenas para alguém como eu, isso não funciona em vez de tentar sudo find /your/location -type f -exec chmod 644 {} \;por arquivos e sudo find /your/location -type d -exec chmod 755 {} \;de diretórios
— NineCattoRules

Executei a solução original e ela atrapalhou minhas permissões em arquivos e diretórios. cuidado! a solução no comentário funcionou, obrigado!
— Mahsa Mortazavi 14/03

3
Por que (?) É melhor que isso chmod -R a=r,u+w,a+X /foo?
— Peter Krauss

falha comunable to execute /bin/chmod: Argument list too long
— vladkras

E se eu quiser que apenas a subpasta seja chmod 755 ao especificar o local desejado? Porque isso também fará com que a pasta pai 755
— MaXi32

105

A maneira mais fácil é fazer:

chmod -R u+rwX,go+rX,go-w /path/to/dir

o que basicamente significa:

para change arquivo modes -Recursively dando:

  • user: rler, ritar we Xexecutar permissões,
  • group e outros ousuários: rleram e Xexecutam permissões, mas não -writuais.

Observe que Xtornará um diretório executável, mas não um arquivo, a menos que já esteja pesquisável / executável.

+X - tornar um diretório ou arquivo pesquisável / executável por todos, se já estiver pesquisável / executável por qualquer pessoa.

Por favor, verifique man chmodpara mais detalhes.

Veja também: Como chmod todos os diretórios, exceto os arquivos (recursivamente)? na SU


7
chmod -R a = r, u + w, a + X / foo #
— 7896 John Allsup 26/12/16

9
Esta resposta, apesar de pura, tem um problema: um arquivo que é executável antes de executar o comando será executável posteriormente. Veja a resposta de @JohnAllsup para um comando que não possui essa falha.
— mzuther

4
@mzuther a menos que este problema é realmente recurso para você
— Riad

37

O mais curto que eu pude pensar é:

chmod -R a=r,u+w,a+X /foo

que funciona no GNU / Linux e acredito no Posix em geral (da minha leitura de: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html ).

O que isso faz é:

  1. Defina arquivo / diretório como r__r__r__ (0444)
  2. Adicione w para o proprietário, para obter rw_r__r__ (0644)
  3. Defina execute for all se um diretório (0755 para dir, 0644 para arquivo).

É importante ressaltar que a permissão da etapa 1 limpa todos os bits de execução; portanto, a etapa 3 apenas adiciona novamente os bits de execução para diretórios (nunca arquivos). Além disso, todas as três etapas acontecem antes da recursão de um diretório (portanto, isso não é equivalente a, por exemplo,

chmod -R a=r /foo
chmod -R u+w /foo
chmod -R a+X /foo

como o a = r remove x dos diretórios, então o chmod não pode recursá-los.)


brilhante! me ajudou muito
— Jannie Theunissen

13

Mais fácil para mim lembrar é duas operações:

chmod -R 644 dirName
chmod -R +X dirName

O + X afeta apenas diretórios.


1
Mais simples e seguro
— Marco Marsala

12

Em https://help.directadmin.com/item.php?id=589, eles escrevem:

Se você precisar de uma maneira rápida de redefinir seus dados public_html para 755 para diretórios e 644 para arquivos, poderá usar algo como isto:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Eu testei e ... funciona!


Poupança de vida! Obrigado pela solução limpa para esse problema! Trabalhou para mim quando precisava corrigir problemas de permissão para uma instalação do WordPress!
— twknab

Funciona bem para fazer os ajustes em um diretório.
— Christian Berendt

8

Isso funcionou para mim:

find /A -type d -exec chmod 0755 {} \;
find /A -type f -exec chmod 0644 {} \;

3
Cuidado: esses comandos não tratam arquivos ou diretórios com espaços em seus nomes. Os comandos na resposta aceita serão.
— Chad Nouis

1
Esta ressalva se aplica somente, se {} não está entre aspas ... assim, não há nenhuma razão para brincar com print0 e xargs -0, os seguintes sufixos:find /A -type X -exec chmod Y '{}' \;
— Michael Stumpfl

6

Faça as duas coisas de uma só vez com:

find -type f ... -o -type d ...

Como em, encontre o tipo f OU o tipo d e faça o primeiro ... para arquivos e o segundo ... para dirs. Especificamente:

find -type f -exec chmod --changes 644 {} + -o -type d -exec chmod --changes 755 {} +

Deixe de fora --changesse deseja que ele funcione silenciosamente.


2

Se você precisar de uma maneira rápida de redefinir seus dados public_html para 755 para diretórios e 644 para arquivos, poderá usar algo como isto:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Além disso, se você sabe que o PHP é executado como usuário e não como "apache", é possível definir os arquivos PHP como 600, para um nível extra de segurança, por exemplo:

find . -type f -name '*.php' -exec chmod 600 {} \;

Você pode encontrar esse recurso aqui: https://help.directadmin.com/item.php?id=589


-9

Isso também pode funcionar:

chmod -R 755 *  // All files and folders to 755.

chmod -R 644 *.*  // All files will be 644.

1
NÃO NINGUÉM FAZER ISSO! isso afeta o servidor completo!
— T.Todua
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.