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:
ls -l deploy.shEsse 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:
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á desligadaNo 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.
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:
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ável755 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:
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 grupoIsso é 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.
sudo chown joana arquivo.txtNormalmente 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ê?