Primeiros Passos com stat - Lendo Metadados de Arquivos
O Que o stat Mostra
stat recupera metadados detalhados de um arquivo em um único comando — mais do que ls -l fornece. Ele mostra timestamps, números de inode, contagem de hard links, uso de blocos e cada atributo que o sistema de arquivos registra.
Resumo Rápido
- Verificar timestamps de arquivo ->
stat nomedoarquivo - Extrair um campo único em scripts ->
stat -c "%Y" nomedoarquivo(mtime como timestamp Unix) - Verificar uso de blocos/inodes do sistema de arquivos ->
stat -f /caminho
Uso Básico
$ 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 saída inclui o nome do arquivo, tamanho, número de inode, permissões, dono/grupo e três tipos de timestamps.
Lendo os Campos da Saída
| Campo | Significado |
|---|---|
Size |
Tamanho do arquivo em bytes |
Blocks |
Espaço em disco usado em blocos de 512 bytes |
IO Block |
Tamanho do bloco do sistema de arquivos |
Inode |
Número do inode (identificador único no sistema de arquivos) |
Links |
Contagem de hard links |
Access (0644/...) |
Permissões em notação octal e simbólica |
Uid / Gid |
Usuário e grupo proprietários |
Blocks conta blocos de disco de 512 bytes realmente alocados, não apenas o tamanho lógico do arquivo. Pode ser maior que Size devido ao alinhamento de limites de bloco.
Entendendo os Três Timestamps
A saída do stat mostra três timestamps: Access, Modify e Change. Eles são relacionados, mas distintos.
| Timestamp | Nome curto | Atualizado quando |
|---|---|---|
Access |
atime | O arquivo é lido |
Modify |
mtime | O conteúdo do arquivo muda |
Change |
ctime | Os atributos do inode mudam (inclusive após atualizações do mtime) |
Birth |
btime | O arquivo é criado (dependente do sistema de arquivos) |
ctime não é hora de criação
Change significa "alteração", não "criação". Executar chmod ou chown também atualiza o ctime. Para a verdadeira hora de criação, use Birth — mas alguns sistemas de arquivos (não-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 opção de montagem noatime.
$ grep noatime /etc/fstab
Usando Números de Inode
O número 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 diretório) apontam para o mesmo inode.
Opções de Formato para Scripts
Use -c (ou --format) para extrair campos específicos 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 |
Permissões (octal) |
%A |
Permissões (simbólica, ex: -rw-r--r--) |
%U |
Nome do usuário proprietário |
%G |
Nome do grupo proprietário |
%i |
Número do inode |
%y |
Hora da última modificação (legível por humanos) |
%Y |
Hora da última modificação (timestamp Unix) |
%x |
Hora do último acesso |
%z |
Hora da última alteração de status |
%h |
Contagem de hard links |
%y vs %Y: minúsculo %y fornece um timestamp legível por humanos; maiúsculo %Y fornece segundos epoch. Use %Y em scripts para aritmética e comparação.
Informações do Sistema de Arquivos com -f
A flag -f reporta estatísticas em nível 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 disponíveis para não-root |
Inodes: Total/Free |
Total e contagem restante de inodes |
Quando um sistema de arquivos tem espaço mas operações de escrita falham, verifique a exaustão de inodes: Inodes: Free próximo de zero. Você também pode verificar com df -i. Exaustão de inodes é uma causa comum de "no space left on device" apesar de espaço aparentemente livre.
Casos de Uso Práticos
Verificar quando um arquivo foi modificado pela última 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 modificação 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 permissões em formato numérico (para chmod)
$ stat -c "%a" /etc/hosts 644