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)

hugo der hungrige
fonte
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
3
Resposta curta:chmod -R u+rwX,go+rX,go-w /foo
kenorb

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
hugo der hungrige
fonte
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

kenorb
fonte
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.)

John Allsup
fonte
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.

Mark D
fonte
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!

Christian Michael
fonte
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 {} \;
Jair Reina
fonte
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.

mza
fonte
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

Hemant Kumar
fonte
-9

Isso também pode funcionar:

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

chmod -R 644 *.*  // All files will be 644.
Puneet Tiwari
fonte
1
NÃO NINGUÉM FAZER ISSO! isso afeta o servidor completo!
T.Todua