# O comando `chmod`

O comando `chmod` (*change mode*) altera as permissões de acesso e os bits de modo de arquivos e diretórios.

Sua principal característica é permitir a definição de permissões por dois formatos:

- Octal: utiliza números de `0` a `7` para representar combinações de permissões.
- Simbólico: utiliza letras como `u`, `g`, `o`, `r`, `w` e `x`, acompanhadas de operadores.

## Sintaxe

```
chmod [OPÇÕES] MODO ARQUIVO...
```

Exemplos:

```
chmod 644 relatorio.txt
chmod u+x script.sh
chmod g-w relatorio.txt
```

No primeiro caso, o modo é especificado em octal. Nos outros dois, a especificação é simbólica.

## Entendendo `rwx`

As permissões básicas podem ser representadas por três bits:

| Permissão                   | Símbolo | Valor binário | Valor octal |
| --------------------------- | ------- | ------------- | ----------- |
| Sem permissão               | `---`   | `000`         | `0`         |
| Execução                    | `--x`   | `001`         | `1`         |
| Escrita                     | `-w-`   | `010`         | `2`         |
| Escrita e execução          | `-wx`   | `011`         | `3`         |
| Leitura                     | `r--`   | `100`         | `4`         |
| Leitura e execução          | `r-x`   | `101`         | `5`         |
| Leitura e escrita           | `rw-`   | `110`         | `6`         |
| Leitura, escrita e execução | `rwx`   | `111`         | `7`         |

O valor de cada permissão individual é:

- `r` = 4
- `w` = 2
- `x` = 1

O valor de uma combinação é obtido pela soma dos valores correspondentes às permissões habilitadas. A {numref}`tab-perm-simb-octal` demonstra 3 exemplos de conversão da representação simbólica para representação octal[^1].

:::{table} Representações das permissões/modo do sistema de arquivos do Linux
:name: tab-perm-simb-octal

| Simbólica |  Adição   | Resultado |
| :-------: | :-------: | :-------: |
|   `rwx`   | 4 + 2 + 1 |     7     |
|   `r-x`   | 4 + 0 + 1 |     5     |
|   `rw-`   | 4 + 2 + 0 |     6     |
:::

Essa representação permite compreender tanto o formato octal quanto a correspondência entre os dígitos e os caracteres apresentados por `ls -l`.

[^1]: Porque o modo do inode reserva 3 bits para `rwx`, o menor valor é zero (0) e o maior é 7, que é igual a ($2^3-1$).