(inode-metadados)=
# Nós-i e metadados

## O que são metadados?

Metadados são informações que descrevem um objeto, em vez de constituírem o próprio conteúdo desse objeto. No contexto de um sistema de arquivos Linux, os metadados permitem que o sistema operacional identifique um arquivo, controle seu acesso e gerencie seu armazenamento. Entre os metadados, os mais comuns estão listados na {numref}`tab-metadados`.


:::{table} Metadados típicos de sistemas de arquivos para Linux
:name: tab-metadados
| Metadado                     | Significado                                                                     |
| ---------------------------- | ------------------------------------------------------------------------------- |
| Tipo de arquivo              | Indica se é arquivo regular, diretório, link simbólico ou outro tipo de objeto. |
| UID                          | Identificador numérico do usuário proprietário.                                 |
| GID                          | Identificador numérico do grupo proprietário.                                   |
| Modo de acesso               | Permissões de leitura, escrita e execução, além de bits especiais.              |
| Tamanho                      | Quantidade de bytes do conteúdo lógico do arquivo.                              |
| Número de links físicos      | Quantos nomes de diretório apontam para o mesmo inode.                          |
| Timestamps                   | Datas e horários associados a eventos no arquivo.                               |
| Referências ao armazenamento | Informações utilizadas pelo sistema de arquivos para localizar os dados.        |
:::

É importante distinguir os metadados do conteúdo. Por exemplo, alterar o proprietário de um arquivo não exige, em condições normais, modificar os bytes do documento armazenado. O que muda é a informação de propriedade mantida pelo sistema de arquivos.

## O que é um inode?

Em sistemas de arquivos Unix e Linux que utilizam *inodes*, ou nós-i, um *inode* é uma estrutura de dados que representa um objeto do sistema de arquivos e armazena seus metadados, além de informações necessárias para localizar seu conteúdo.

O inode normalmente contém informações como:

- Tipo do objeto.
- Permissões e bits de modo.
- UID do proprietário.
- GID do grupo proprietário.
- Tamanho lógico.
- Timestamps.
- Contagem de links físicos.
- Referências aos blocos de dados ou outras estruturas usadas para localizar o conteúdo.

O inode não armazena, em geral, o nome do arquivo. Os nomes ficam nas entradas dos diretórios, que associam nomes a números de inode. A entrada do diretório associa um nome ao inode, que contém metadados e referências aos dados, conforme ilustrado na {numref}`fig-inode`. O número `4821` é apenas ilustrativo. Os números reais dependem do sistema de arquivos e do volume em que o arquivo está armazenado. 

:::{figure} ./_static/imagens/image-inode.png
:name: fig-inode

Representação do nome de um arquivo associado a um inode
:::

## Nome do arquivo e inode são coisas diferentes

Considere os comandos:

```
touch relatorio.txt
ln relatorio.txt relatorio-copia.txt
ls -li relatorio.txt relatorio-copia.txt
```

O comando `touch` cria o arquivo vazio se ele ainda não existir. O comando `ln`, sem opções, cria um link físico (hard link).

Uma saída possível seria:

```
123456 -rw-r--r-- 2 ana professores 0 Oct 19 20:00 relatorio.txt
123456 -rw-r--r-- 2 ana professores 0 Oct 19 20:00 relatorio-copia.txt
```

Observe os campos:

- `123456`: número do inode, igual nas duas entradas.
- `2`: quantidade de links físicos.
- `ana`: usuário proprietário.
- `professores`: grupo proprietário.
- `0`: tamanho do arquivo em bytes.

Como os dois nomes apontam para o mesmo inode, eles representam o mesmo objeto do sistema de arquivos. Alterar o conteúdo ou as permissões por um dos nomes afeta o objeto acessível pelo outro nome também.

Isso é diferente de criar uma cópia independente com `cp`, que normalmente produz um novo arquivo com seu próprio inode.

Atenção: inodes são identificados dentro de um sistema de arquivos. Para identificar um objeto de forma mais precisa, considere o par formado pelo dispositivo ou sistema de arquivos e pelo número do inode.

## Como consultar o inode e os metadados

O comando `ls -i` exibe o número do inode:

```
ls -i relatorio.txt
```

Para consultar um conjunto mais completo de metadados, use `stat`:

```
stat relatorio.txt
```

Uma saída típica inclui informações como:

```yaml
File: relatorio.txt
Size: 0
Inode: 123456
Links: 2
Access: (0644/-rw-r--r--)
Uid: (1000/ana)
Gid: (1001/professores)
Access: 2026-10-19 20:00:00
Modify: 2026-10-19 20:00:00
Change: 2026-10-19 20:00:00
Birth: 2026-10-19 20:00:00
```

Os valores são ilustrativos. A disponibilidade do campo `Birth` depende do sistema de arquivos e do suporte do sistema.

É útil diferenciar três timestamps:

- *atime* — *access time*: relacionado ao último acesso ao conteúdo.
- *mtime* — *modification time*: relacionado à última modificação do conteúdo.
- *ctime* — *status change time*: relacionado à última alteração do estado do inode, como permissões, propriedade ou tamanho.

O *ctime* não significa necessariamente *creation time*. A data de criação, quando disponível, é uma informação distinta.
