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.