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