Primeiros Passos com stat - Lendo Metadados de Arquivos

Primeiros Passos com stat - Lendo Metadados de Arquivos

O Que o stat Mostra

stat recupera metadados detalhados de um arquivo em um unico comando — mais do que ls -l fornece. Ele mostra timestamps, numeros de inode, contagem de hard links, uso de blocos e cada atributo que o sistema de arquivos registra.

Resumo Rapido

  • Verificar timestamps de arquivo -> stat nomedoarquivo
  • Extrair um campo unico em scripts -> stat -c "%Y" nomedoarquivo (mtime como timestamp Unix)
  • Verificar uso de blocos/inodes do sistema de arquivos -> stat -f /caminho

Uso Basico

$ stat /etc/hosts
  File: /etc/hosts
  Size: 220             Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 1179676     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2026-05-28 09:12:34.000000000 +0000
Modify: 2026-03-10 14:22:05.000000000 +0000
Change: 2026-03-10 14:22:05.000000000 +0000
 Birth: 2025-01-15 08:00:00.000000000 +0000

A saida inclui o nome do arquivo, tamanho, numero de inode, permissoes, dono/grupo e tres tipos de timestamps.

Lendo os Campos da Saida

Campo Significado
Size Tamanho do arquivo em bytes
Blocks Espaco em disco usado em blocos de 512 bytes
IO Block Tamanho do bloco do sistema de arquivos
Inode Numero do inode (identificador unico no sistema de arquivos)
Links Contagem de hard links
Access (0644/...) Permissoes em notacao octal e simbolica
Uid / Gid Usuario e grupo proprietarios

Blocks conta blocos de disco de 512 bytes realmente alocados, nao apenas o tamanho logico do arquivo. Pode ser maior que Size devido ao alinhamento de limites de bloco.

Entendendo os Tres Timestamps

A saida do stat mostra tres timestamps: Access, Modify e Change. Eles sao relacionados, mas distintos.

Timestamp Nome curto Atualizado quando
Access atime O arquivo e lido
Modify mtime O conteudo do arquivo muda
Change ctime Os atributos do inode mudam (inclusive apos atualizacoes do mtime)
Birth btime O arquivo e criado (dependente do sistema de arquivos)

ctime nao e hora de criacao

Change significa "alteracao", nao "criacao". Executar chmod ou chown tambem atualiza o ctime. Para a verdadeira hora de criacao, use Birth — mas alguns sistemas de arquivos (nao-ext4) exibem -- para Birth.

Nota de Desempenho sobre atime

Em muitos sistemas Linux, ler um arquivo dispara uma escrita de atime. Sistemas sensivos a desempenho frequentemente desabilitam isso com a opcao de montagem noatime.

$ grep noatime /etc/fstab

Usando Numeros de Inode

O numero de inode identifica unicamente um arquivo dentro de um sistema de arquivos. Hard links compartilham o mesmo inode.

$ stat /etc/hosts | grep Inode
    Inode: 1179676
# Criar um hard link e verificar que compartilham o mesmo inode
$ ln file.txt hardlink.txt
$ stat -c "%i %n" file.txt hardlink.txt
1234567 file.txt
1234567 hardlink.txt

A contagem de Links se torna 2, confirmando que dois nomes (entradas de diretorio) apontam para o mesmo inode.

Opcoes de Formato para Scripts

Use -c (ou --format) para extrair campos especificos em scripts.

# Tamanho do arquivo em bytes
$ stat -c "%s" /var/log/syslog
1048576

# Hora da ultima modificacao (timestamp Unix)
$ stat -c "%Y" /var/log/syslog
1748700000

# Permissoes (octal) e dono
$ stat -c "%a %U" /etc/hosts
644 root

# Multiplos campos formatados
$ stat -c "Name: %n | Size: %s bytes | Modified: %y" /etc/hosts
Name: /etc/hosts | Size: 220 bytes | Modified: 2026-03-10 14:22:05.000000000 +0000

Especificadores de formato comuns:

Especificador Significado
%n Nome do arquivo
%s Tamanho em bytes
%a Permissoes (octal)
%A Permissoes (simbolica, ex: -rw-r--r--)
%U Nome do usuario proprietario
%G Nome do grupo proprietario
%i Numero do inode
%y Hora da ultima modificacao (legivel por humanos)
%Y Hora da ultima modificacao (timestamp Unix)
%x Hora do ultimo acesso
%z Hora da ultima alteracao de status
%h Contagem de hard links

%y vs %Y: minusculo %y fornece um timestamp legivel por humanos; maiusculo %Y fornece segundos epoch. Use %Y em scripts para aritmetica e comparacao.

Informacoes do Sistema de Arquivos com -f

A flag -f reporta estatisticas em nivel de sistema de arquivos em vez de metadados de arquivos individuais.

$ stat -f /
  File: "/"
    ID: fd0000000000 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 20000000  Free: 12000000  Available: 11000000
Inodes: Total: 5000000   Free: 4800000
Campo Significado
Block size Tamanho do bloco do sistema de arquivos
Blocks: Total/Free/Available Total, livre e blocos disponiveis para nao-root
Inodes: Total/Free Total e contagem restante de inodes

Quando um sistema de arquivos tem espaco mas operacoes de escrita falham, verifique a exaustao de inodes: Inodes: Free proximo de zero. Voce tambem pode verificar com df -i. Exaustao de inodes e uma causa comum de "no space left on device" apesar de espaco aparentemente livre.

Casos de Uso Praticos

Verificar quando um arquivo foi modificado pela ultima vez

$ stat -c "%y" /etc/nginx/nginx.conf
2026-04-01 10:30:00.000000000 +0000

Registrar mtime antes de um backup

$ stat -c "%Y %n" /important/data.db
1748700000 /important/data.db

Comparar tempos de modificacao entre arquivos

$ for f in /etc/nginx/*.conf; do stat -c "%Y %n" "$f"; done | sort -n
1748600000 /etc/nginx/mime.types
1748700000 /etc/nginx/nginx.conf

Obter permissoes em formato numerico (para chmod)

$ stat -c "%a" /etc/hosts
644

Proximas Leituras