Como alterar permissões de arquivo para um diretório em um comando

10

Como posso alterar todas as permissões de arquivo de um diretório em um comando no Unix?

    
por Der Hochstapler 08.11.2010 / 18:31

3 respostas

21

Para alterar as permissões em um arquivo ou entrada de diretório de forma não recursiva, use o comando chmod (consulte man chmod para ler mais sobre suas opções específicas):

chmod +x dir  # Set a directory to be listable
chmod +x file # Set a file to be executable

Para alterar o proprietário de um arquivo / diretório recursivamente (afetando todos os descendentes):

chown -R username           dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group

Para alterar as permissões de bits de todos os arquivos em um diretório, de forma recursiva:

find dir -type f -exec chmod 644 {} ';' # make all files       rw-r-r-

Para alterar os bits de permissão de todos os diretórios:

find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x

Seria bom se você pudesse fazer isso:

chmod -R 755 dir

No entanto, isso tem problemas. Ele trata arquivos e diretórios da mesma forma. O comando acima torna os diretórios legíveis e legíveis por todos os usuários, mas também torna todos os arquivos executáveis, o que geralmente é o que você não deseja fazer.

Se mudarmos para 644 , teremos outro problema:

$ chmod -R 644 x2
chmod: cannot access 'x2/authors.html': Permission denied
chmod: cannot access 'x2/day_of_week.plot': Permission denied
chmod: cannot access 'x2/day_of_week.dat': Permission denied
chmod: cannot access 'x2/commits_by_year.png': Permission denied
chmod: cannot access 'x2/index.html': Permission denied
chmod: cannot access 'x2/commits_by_year.plot': Permission denied
chmod: cannot access 'x2/commits_by_year_month.plot': Permission denied
chmod: cannot access 'x2/files_by_date.png': Permission denied
chmod: cannot access 'x2/files.html': Permission denied
...

O problema é que 644 retira o bit da lista de diretórios e esse efeito colateral impede a passagem adicional da árvore de arquivos. Você pode contornar esse problema usando sudo , mas ainda acaba com diretórios que são completamente inúteis para usuários não-root.

O problema é que chmod -R funciona bem em alguns casos (por exemplo, chmod -R g-r ), mas não nos casos em que você deseja mexer com o -x , pois ele opera indiscriminadamente em arquivos e diretórios.

    
por 08.11.2010 / 18:40
5

chmod tem um -R flag, o que significa alterar as permissões em arquivos e diretórios de forma recursiva.

Você pode usar o capital 'X' para fazer a coisa certa para as pastas: 'X'="executar / pesquisar somente se o arquivo é um diretório ou já tem permissão de execução para algum usuário"

Então, por exemplo: chmod -R ug = rwX, o-rwx.

Tornaria uma árvore inteira acessível ao proprietário e ao grupo de cada arquivo, e não acessível a mais ninguém. Quaisquer arquivos já executáveis ainda seriam executáveis depois, e todos os diretórios teriam o 'x' para o usuário e o grupo e não para outros.

    
por 08.11.2010 / 18:34
2
chmod -R <file permission> *

Na página do manual de chmod :

-R, --recursive
              change files and directories recursively

Use a opção chmod com -R para várias direções, que possui uma árvore de subdiretórios com milhões de arquivos e que você deseja alterar as permissões de arquivo desses arquivos juntos em um único disparo.

A permissão de arquivo pode ser por exemplo. 777, 755, 644, etc.

    
por 01.08.2012 / 09:10

Tags