# O comando `ls`

O comando `ls` lista arquivos e diretórios. É uma das principais ferramentas para inspecionar os objetos existentes em um sistema de arquivos.

## Sintaxe

```
ls [OPÇÕES] [ARQUIVO_OU_DIRETÓRIO...]
```

Exemplos básicos:

```
ls
ls /etc
ls relatorio.txt
```

Sem argumentos, o comando lista o conteúdo do diretório atual. Quando recebe um diretório como argumento, lista suas entradas; quando recebe um arquivo regular, apresenta informações sobre esse arquivo conforme as opções selecionadas.

## Opções importantes

| Opção | Finalidade                                                            |
| ----- | --------------------------------------------------------------------- |
| `-l`  | Exibe informações em formato longo.                                   |
| `-a`  | Inclui arquivos ocultos, cujos nomes começam com `.`.                 |
| `-h`  | Exibe tamanhos em unidades legíveis, geralmente em conjunto com `-l`. |
| `-i`  | Exibe o número do inode.                                              |
| `-d`  | Exibe o próprio diretório, sem listar seu conteúdo.                   |
| `-R`  | Lista recursivamente os subdiretórios.                                |
| `-t`  | Ordena pela data de modificação.                                      |
| `-r`  | Inverte a ordem da listagem.                                          |
| `-n`  | Exibe UID e GID numéricos em vez dos nomes correspondentes.           |

Exemplos:

```
ls -l
ls -lah
ls -li
ls -ln
ls -ld /etc
ls -lt
ls -lR documentos/
```

As opções podem ser combinadas. Por exemplo, `ls -lah` lista os arquivos, incluindo os ocultos, com informações detalhadas e tamanhos legíveis.

## Interpretando `ls -l`

Considere a saída:

```
-rw-r----- 1 ana professores 2048 Oct 19 19:30 relatorio.txt
\________/ | \_/ \_________/ \__/ \__________/ \___________/
     1     2  3       4        5        6            7
```

Ela foi retornada pela execução do comando `ls -l` ou pela execução do comando `ls -l relatorios.txt`. A seguinte interpretação deve ser dada:

1. `-rw-r-----`: Tipo e permissões
1. `1`: Quantidade de links físicos[^hard]
1. `ana`: Proprietário
1. `professores`: Grupo proprietário
1. `2048`: Tamanho em bytes
1. `Oct 19 19:30`: Data e hora exibidas
1. `relatorio.txt`: Nome da entrada no diretório

O primeiro caractere identifica o tipo de objeto. Alguns valores comuns são:

| Caractere | Tipo                      |
| --------- | ------------------------- |
| `-`       | Arquivo regular           |
| `d`       | Diretório                 |
| `l`       | Link simbólico            |
| `c`       | Dispositivo de caracteres |
| `b`       | Dispositivo de blocos     |
| `p`       | FIFO ou pipe nomeado      |
| `s`       | Socket Unix               |

Os nove caracteres seguintes indicam as permissões convencionais de proprietário, grupo e outros usuários. Esse assunto será detalhado na seção sobre `chmod`.

Observação: o tamanho mostrado por `ls -l` é o tamanho lógico do arquivo, não necessariamente o espaço físico ocupado no dispositivo. Arquivos esparsos, compressão e outras características do sistema de arquivos podem produzir diferenças.


[^hard]: Links físicos também são conhecidos como *hard links*, em contraposição aos links simbólicos, ou *soft links*.