Artigo original: Chmod Command – How to Change File Permissions in Linux

Um dos primeiros comandos que aprendi no Linux foi o comando touch, que cria um arquivo usando a linha de comando.

Se você tentar criar, por exemplo, um arquivo de texto, tudo o que você precisa fazer é digitar touch filename.txt e pressionar Enter. O arquivo será criado para você no diretório em que você está. Você pode, então, escrever o que quiser usando o editor de arquivos de sua escolha.

No entanto, quando se trata de criar scripts, as coisas podem ficar um pouco mais complicadas. Por quê?

Vou tentar demonstrar isso com outro exemplo. Suponha que você queira criar um script usando o touch. Digite touch example.sh, pressione Enter e pronto. Mais uma vez, você pode escrever nele usando um editor de arquivos.

Com tudo pronto, só falta testá-lo. Você digita ./sample.sh e pressiona Enter para ver seu script em ação e... o que essa mensagem está me dizendo?

Screenshot-from-2022-03-20-13-58-39

Por que precisamos de permissões?

Espere aí. Eu sou o admin! Como assim eu não tenho permissão para executar um script que eu mesmo escrevi agora há pouco?

Na verdade, existe um motivo – e, para ser honesto, a maioria dos usuários deve ser grata por isso, já que não ser capaz de executar scripts sem saber o que você está fazendo, muitas vezes, impede que você coloque seu sistema em risco.

Vamos conversar rapidamente sobre permissões primeiro. Depois, vamos descobrir como mudá-las.

Para obter mais informações sobre seu arquivo, usaremos o comando que lista os arquivos em um diretório: ls.

Depois de digitar ls e pressionar Enter, isto é o que obtemos na linha de comando:

Screenshot-from-2022-03-20-14-05-58

O que ele faz é listar todos os arquivos visíveis no diretório que você está no momento. Ao adicionar a flag -l a ele, ele fornece mais informações sobre os arquivos no diretório. Este é o resultado quando digitamos ls -l e pressionamos Enter:

Screenshot-from-2022-03-20-14-08-00

Vemos o(s) mesmo(s) arquivo(s), mas com muitas informações antes dele(s). Para começar, temos uma sequência de dez traços e letras que podem parecer sem sentido no início. Este é, na verdade, o mapeamento de permissões que seu arquivo tem.

O primeiro caractere pode ser um traço (-, para um arquivo comum), um d (para um diretório) ou um l (para um soft link). Por uma questão de simplicidade, vou me concentrar nos arquivos simples, embora as permissões sejam válidas para todos esses tipos de arquivos/pastas.

Após o primeiro caractere, os outros 9 podem ser divididos em grupos de três. O primeiro trio mostra as permissões para o usuário atual. A seguir, temos as permissões para esse grupo. Os três últimos caracteres são as permissões para todos os usuários que não se encaixam nessas categorias.

Para nossa explicação, vamos nos concentrar nas três primeiras permissões, já que não vamos mudar de grupo ou algo do tipo.

O primeiro trio diz rw-.

Hora de entender o que isso significa. Há três coisas que você normalmente pode fazer com um arquivo: lê-lo, gravá-lo e executá-lo. Ou seja, basicamente, o que essas letras significam.

O primeiro r significa a permissão de leitura (do inglês, read). Então, temos w para a permissão de escrita (do inglês, write). Finalmente, um traço, ou seja, que aquilo que deveria estar ali, não está. O que deveria estar ali é um x, que significa eXecutável (do inglês, executable).

Então, falando sobre o usuário atual (eu), as permissões que tenho para esse arquivo são as permissões de leitura e gravação. No entanto, não consigo executar o arquivo sample.sh. É por isso que, ao tentar executar o arquivo, recebi a mensagem 'Permission denied' (em português, permissão negada).

Como posso então executar este arquivo? É aí que o comando chmod entra em jogo.

O que faz o chmod?

Bem, eu venho mencionando "permissões" desde o início do artigo. Vamos estender um pouco essa explicação para dizer que elas são 'permissões para acessar um arquivo em um determinado modo. Isso significa que r denota a permissão para acessar o arquivo no modo de leitura, w denota a permissão para acessar o arquivo no modo de gravação e x denota a permissão para acessar o arquivo no modo executável.

Por que estou dizendo isso? Em função do comando deste artigo. chmod significa 'change mode' (em português, alterar o modo). Em outras palavras, ao usar esse comando, você está alterando o modo de um arquivo para o(s) modo(s) que deseja usar.

Como usar operadores com o chmod

É necessário usar um operador com o comando chmod. Ele serve para especificar o tipo de alteração que você deseja fazer nas permissões.

Por exemplo, + é o operador que você usa para adicionar uma permissão àquelas que o arquivo já tem. - remove uma permissão da lista. Há também o operador =, que redefine as permissões para que você possa defini-las novamente.

No nosso caso, ao digitar chmod -w sample.sh, o que estou pedindo ao comando é que remova a permissão de escrita. Então, o que eu teria que fazer para adicionar a permissão de execução do arquivo é digitar chmod +x sample.sh.

Se eu tentar executar o arquivo, o que eu colocar no script agora poderá ser executado.

Usando ls -l, isso é o que eu teria agora:

Screenshot-from-2022-03-20-14-12-03

Quem recebe as permissões?

Outra coisa que vale a pena ressaltar é quem está recebendo essa permissão. Você verá que o 'x' é dado a todos os usuários, ao proprietário do arquivo, ao grupo e a outros. Se isso não é o que você quer, talvez seja uma coisa boa remover a permissão de execução novamente com chmod -x sample.sh.

Screenshot-from-2022-03-20-14-16-11

Para habilitar a permissão apenas para o proprietário do arquivo (eu, nesse caso), devemos adicionar um 'u' antes do '+x', assim:

chmod u+x sample.sh

Ao digitar ls -l, eis o que temos:

Screenshot-from-2022-03-20-14-18-22

Se você quisesse dar a permissão para o proprietário e seu grupo, então o comando seria chmod ug+x sample.sh.

Screenshot-from-2022-03-20-14-20-25

Bem, acho que isso cobre o que eu gostaria de mostrar a vocês. Há outras coisas que podem ser de seu interesse, como usar chmod com valores octais ou binários para representar as permissões. Esses, porém, são modos que usamos para ter os mesmos resultados e acredito que as letras são uma maneira mais fácil de alcançá-los.

Caso você queira mais informações sobre o comando, uma coisa que você pode fazer é digitar chmod --help, que dará a você uma versão resumida sobre o que o comando pode fazer. Uma descrição ainda mais detalhada pode ser obtida digitando man chmod.

Espero que este artigo tenha sido útil. Para ver mais artigos sobre comandos no Linux em português, confira o editorial do freeCodeCamp em português.

Uma ótima programação para você! 😃