Aprenda / Terminal e linha de comando

FundamentosAula 5 de 1615 min0% da trilha

Permissões e dono de arquivo

Aquele bloco 'rwxr-xr-x' que aparece no ls -l não é ruído — é a resposta pra 'por que eu não consigo executar/editar isso'.

Se você já tentou rodar um script e recebeu Permission denied, ou tentou editar um arquivo e o editor recusou salvar, o motivo quase sempre está numa combinação de dono e permissões — um sistema que existe desde os primórdios do Unix e que continua sendo a base de como Linux e macOS controlam quem pode fazer o quê com cada arquivo.

Lendo a saída de ls -l

Volte pro ls -la da lição 2 e olhe com atenção pra primeira coluna de cada linha:

terminal
ls -l deploy.sh

Esse bloco -rwxr-xr-x tem 10 caracteres, e cada posição tem um significado fixo. O primeiro caractere diz o tipo: - pra arquivo comum, d pra pasta. Os nove seguintes se dividem em três grupos de três:

os 9 caracteres de permissão, em 3 grupos de 3
rwx      r-x      r-x
dono     grupo    outros

r = read (ler)       w = write (escrever/modificar)      x = execute (executar)
"-" no lugar da letra significa que aquela permissão está desligada

No exemplo, o dono (joana) pode ler, escrever e executar (rwx); o grupo dono do arquivo pode ler e executar, mas não escrever (r-x); e outros (todo mundo mais) também só pode ler e executar (r-x). Faz sentido pra um script: qualquer um pode rodar, só a Joana pode editar.

chmod numérico

chmod (change mode) muda essas permissões. O jeito mais comum é o formato numérico, onde cada permissão vale um número que se soma: r=4, w=2, x=1. Somando as três de um grupo, você chega num dígito de 0 a 7.

como rwx vira 7, r-x vira 5, r-- vira 4
rwx = 4+2+1 = 7     (lê, escreve e executa)
r-x = 4+0+1 = 5     (lê e executa, não escreve)
r-- = 4+0+0 = 4     (só lê)
rw- = 4+2+0 = 6     (lê e escreve, não executa)

Um dígito por grupo (dono, grupo, outros), nessa ordem, dá o número de três dígitos que você vê em comandos reais:

terminal
chmod 755 deploy.sh   # rwx pro dono, r-x pro grupo, r-x pra outros — típico de script executável
chmod 644 config.txt  # rw- pro dono, r-- pro grupo, r-- pra outros — típico de arquivo comum, não executável

755 e 644 não são números mágicos decorados sem entender — são exatamente os exemplos acima traduzidos: 755 = dono pode tudo, o resto só lê e executa; 644 = dono lê e escreve, o resto só lê.

chmod simbólico

Quando você só quer mudar uma permissão sem recalcular o número inteiro, o formato simbólico é mais direto:

terminal
chmod +x script.sh    # adiciona permissão de execução pra todo mundo
chmod u+x script.sh   # adiciona execução só pro dono (u = user)
chmod g-w arquivo.txt # remove escrita do grupo

Isso é exatamente o que resolve o erro clássico de "tentei rodar meu script e deu Permission denied": o arquivo existe, o conteúdo está certo, só falta a permissão de execução — chmod +x resolve.

chown — mudando o dono

chown (change owner) muda quem é o dono do arquivo — diferente de chmod, que muda o que cada grupo pode fazer, mas não quem pertence a cada grupo.

terminal
sudo chown joana arquivo.txt

Normalmente precisa de sudo porque trocar o dono de um arquivo é uma operação sensível — você não deveria conseguir "roubar" a posse de um arquivo de outra pessoa sem privilégio de administrador.

Exercício

Você criou um script backup.sh e, ao rodar ./backup.sh, recebeu Permission denied. O conteúdo do arquivo está correto. Qual comando resolve, e por quê?

Quiz rápido

Na saída '-rwxr-xr-x', o que a segunda parte ('r-x') representa?
Qual a diferença entre 'chmod' e 'chown'?