Skip to content

chmod -R

chmod -R modo pasta aplica o mesmo modo ao diretório e a todos os arquivos e subpastas abaixo dele, então um modo numérico como 755 também marca todo arquivo como executável; ajuste diretórios e arquivos separadamente com find, ou use um modo simbólico com X maiúsculo.

O que cada comando recursivo faz

Resultado num diretório, num arquivo de dados e num script
ComandoDiretório (era 700)Arquivo de dados (era 600)Script (era 700)
chmod -R 755755 rwxr-xr-x755 rwxr-xr-x755 rwxr-xr-x
chmod -R 644644 rw-r--r--644 rw-r--r--644 rw-r--r--
chmod -R u=rwX,go=rX755 rwxr-xr-x644 rw-r--r--755 rwxr-xr-x
chmod -R u=rwX,g=rX,o=750 rwxr-x---640 rw-r-----750 rwxr-x---
chmod -R a+rX755 rwxr-xr-x644 rw-r--r--755 rwxr-xr-x

Por que chmod -R com número costuma ser erro

Diretórios e arquivos pedem modos diferentes: um diretório precisa de execução para alguém entrar, um arquivo de dados não deve ter. Um único número não expressa as duas coisas. O chmod -R 755 torna todo arquivo executável, e o chmod -R 644 tira a execução de todo diretório, e depois disso só o root consegue entrar neles.

Os dois padrões corretos

O find separa diretórios e arquivos. O + no fim do -exec passa vários caminhos por chamada do chmod, o que é muito mais rápido que \; em árvores grandes.

O X maiúsculo só adiciona execução a diretórios e a arquivos que já são executáveis para alguém, então um único comando simbólico acerta os dois tipos e mantém os scripts existentes executáveis.

find /var/www/site -type d -exec chmod 755 {} +
find /var/www/site -type f -exec chmod 644 {} +

# ou numa passada só, mantendo scripts executáveis:
chmod -R u=rwX,go=rX /var/www/site

Opções que valem conhecer

O chmod do GNU não segue links simbólicos que encontra durante a recursão; -H segue os links passados na linha de comando e -L segue todo link para diretório. O -c mostra só os arquivos que realmente mudaram, o que facilita revisar o estrago.

O chmod do GNU não protege a raiz / por padrão: chmod -R 777 / roda. Use --preserve-root em scripts, ou confira as variáveis para um $DIR vazio não virar /.

chmod -R -c go-w ./site     # mostra o que mudou
chmod -R --preserve-root u=rwX,go=rX "$DIR"

Perguntas frequentes

Como dar chmod 755 só nas pastas?
find . -type d -exec chmod 755 {} + muda só os diretórios. Use -type f com 644 para os arquivos.
O que significa o X maiúsculo no chmod?
Execução, mas só para diretórios e para arquivos que já têm algum bit de execução. Isso deixa um único comando recursivo tratar pastas e arquivos.
O chmod -R segue links simbólicos?
O chmod do GNU pula os links simbólicos que encontra na recursão e só muda o alvo de um link quando ele é passado na linha de comando. Use -L para seguir todo link para diretório, ou -H só para os links da linha de comando.
O chmod -R é igual no macOS?
Sim para o -R e os modos. O chmod do macOS é a versão BSD: não tem --preserve-root nem -c, e o stat usa -f em vez de -c.

Revisado em por Arielton Oberek.