web-dev-qa-db-pt.com

Como faço para alterar os direitos para uma pasta e todas as suas subpastas e arquivos em uma etapa no Linux?

Eu gostaria de alterar as permissões de uma pasta e todas as suas subpastas e arquivos em uma única etapa (comando) no Linux.

Eu já tentei o comando abaixo, mas funciona apenas para a pasta mencionada:

chmod 775 /opt/lampp/htdocs

Existe uma maneira de definir chmod 755 para /opt/lampp/htdocs e todo o seu conteúdo, incluindo subpastas e arquivos?

Além disso, no futuro, se eu criar uma nova pasta ou arquivo dentro de htdocs, como as permissões podem ser automaticamente definidas como 755?

Eu também vi este link:

http://stackoverflow.com/questions/3740187/how-to-set-default-chmod-in-linux-terminal

1546
Adam

As outras respostas estão corretas, em que chmod -R 755 irá definir essas permissões para todos os arquivos e subpastas na árvore. Mas por que diabos você iria querer ? Pode fazer sentido para os diretórios, mas por que definir o bit de execução em todos os arquivos?

Eu suspeito que o que você realmente quer fazer é configurar os diretórios para 755 e deixar os arquivos sozinhos ou configurá-los para 644. Para isso, você pode usar o comando find. Por exemplo:

Para alterar todos os diretórios para 755 (drwxr-xr-x):

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Para alterar todos os arquivos para 644 (-rw-r--r--):

find /opt/lampp/htdocs -type f -exec chmod 644 {} \;
2608
WombleGoneBad

Verifique a opção -R

chmod -R <permissionsettings> <dirname>

No futuro, você pode economizar muito tempo verificando a página do manual primeiro:

man <command name>

Então, neste caso:

man chmod
709
Steve Robillard

Se você quiser definir permissões em todos os arquivos para a+r, e todos os diretórios para a+x, e fazer isso recursivamente através da árvore de subdiretórios completa, use:

chmod -R a+rX *

O X (que é maiúscula X, não é pequeno x!) É ignorado para arquivos (a menos que eles já sejam executáveis ​​para alguém), mas é usado para diretórios.

340
Pete

Você pode usar -R com chmod para percursão recursiva de todos os arquivos e subpastas.

Você pode precisar do Sudo, pois depende de LAMP sendo instalado pelo usuário atual ou outro:

Sudo chmod 755 -R /opt/lampp/htdocs
122
ravi ranjan

Para definir para todas as subpastas (recursivamente) use -R

chmod 755 /folder -R

E use umask para definir o padrão para novas pastas/arquivos cd/folder umask 755

71
Topera

O comando recursivo correto é:

Sudo chmod 755 -R /opt/lampp/htdocs

-R: altera cada pasta secundária incluindo a pasta atual

60
Pramendra Gupta

chmod 755 -R /opt/lampp/htdocs irá definir recursivamente as permissões. Não há como definir as permissões para arquivos automaticamente apenas nesse diretório criado depois de definir as permissões, mas você pode alterar as permissões de arquivo padrão do sistema com a configuração umask 022.

49
sleepynate

Você pode querer considerar esta resposta dada por nik no superusuário e usar "um chmod" para todos os arquivos/pastas como este:

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
23
Iam Zesh

Usar:

Sudo chmod 755 -R /whatever/your/directory/is

No entanto, tenha cuidado com isso. Pode realmente te machucar se você alterar as permissões dos arquivos/pastas errados.

20
Nate Starner

Aqui está outra maneira de configurar diretórios para 775 e arquivos para 664.

find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)

Pode parecer longo, mas é bem legal por três razões:

  1. Faz a varredura através do sistema de arquivos apenas uma vez, em vez de duas vezes.
  2. Fornece melhor controle sobre como arquivos são manipulados versus como diretórios são manipulados. Isso é útil quando se trabalha com modos especiais como o sticky bit , que você provavelmente deseja aplicar a diretórios, mas não a arquivos.
  3. Usa uma técnica diretamente das páginas man (veja abaixo).

Note que eu não confirmei a diferença de desempenho (se houver) entre esta solução e a de simplesmente usar dois comandos find (como na solução de Peter Mortensen). No entanto, ver um exemplo semelhante no manual é encorajador.

Exemplo da página man find:

find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)

Traverse the filesystem just once, listing setuid files and  direc‐
tories into /root/suid.txt and large files into /root/big.txt.

Felicidades

19
chrisfargen

chmod -R 755 directory_name funciona, mas como você manteria novos arquivos no 755 também? As permissões do arquivo se tornam a permissão padrão.

11
Sanchit Gupta

Você quer ter certeza de que os arquivos e diretórios apropriados são chmod-ed/permissões para aqueles que são apropriados. Para todos os diretórios que você deseja

find /opt/lampp/htdocs -type d -exec chmod 711 {} \;

E para todas as imagens, JavaScript, CSS, HTML ... bem, você não deve executá-las. Então use

chmod 644 img/* js/* html/*

Mas, para todo o código lógico (por exemplo, código PHP), você deve definir permissões de modo que o usuário não possa ver o código:

chmod 600 file
10
NikolaiDante

Para Mac OS X 10.7 (Lion), é:

chmod -R 755 /directory

E sim, como todos os outros dizem, tenha cuidado ao fazer isso.

7
wmartin

Eu acho que Adam estava perguntando como alterar o valor umask para todos os processos que estão ligados ao diretório /opt/lampp/htdocs.

A máscara do modo de criação de arquivo do usuário (umask) é usada para determinar a permissão do arquivo para arquivos recém-criados. Pode ser usado para controlar a permissão de arquivo padrão para novos arquivos.

então se você vai usar algum tipo de programa de ftp para fazer upload de arquivos para o /opt/lampp/htdocs você precisa configurar o seu servidor ftp para usar o umask que você quiser.

Se arquivos/diretórios forem criados por exemplo por php, você precisa modificar o código php

<?php
umask(0022);
// other code
?>

se você criar novos arquivos/pastas a partir da sua sessão bash, você pode definir o valor umask no seu perfil Shell ~/.bashrc Ou você pode configurar umask no arquivo /etc/bashrc ou /etc/profile para todos os usuários. adicione o seguinte ao arquivo: umask 022

Sample umask Values and File Creation Permissions
If umask value set to   User permission     Group permission     Others permission
000                         all              all                   all
007                         all              all                   none
027                         all          read / execute            none

E para alterar permissões para arquivos já criados, você pode usar o find. Espero que isto ajude.

6
Viktor

Existem duas respostas para encontrar arquivos e aplicar chmod a eles. O primeiro é find o arquivo e aplica chmod como ele encontra (como sugerido por @WombleGoneBad).

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

A segunda solução é gerar uma lista de todos os arquivos com o comando find e fornecer essa lista ao comando chmod (como sugerido por @lamgesh).

chmod 755 $(find /path/to/base/dir -type d)

Ambas as versões funcionam bem, contanto que o número de arquivos retornados pelo comando find seja pequeno. A segunda solução parece ótima para os olhos e mais legível do que a primeira. Se houver um grande número de arquivos, a segunda solução retornará erro: Argument list too long.

Então minha sugestão é

  1. Use chmod -R 755 /opt/lampp/htdocs se você quiser alterar as permissões de todos os arquivos e diretórios de uma só vez.
  2. Use find /opt/lampp/htdocs -type d -exec chmod 755 {} \; se o número de arquivos que você está usando for muito grande. A opção -type x procura apenas um tipo específico de arquivo, onde d é usado para encontrar o diretório, f para o arquivo e l para o link.
  3. Use chmod 755 $(find /path/to/base/dir -type d) caso contrário
  4. Melhor usar o primeiro em qualquer situação
4
Prabhu

É muito simples.

No Terminal, vá para o gerenciador de arquivos. exemplo: Sudo nemo. Vá /opt/ e clique em Properties → Permission . e depois Outros . Finalmente, mude para criar e apagar e acessar o arquivo para ler e escrever e clique no botão aplicar ... E trabalhar.

2
Debian.