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.