Tutorial de Linux / Tipos de arquivo e metadados: ls, file, stat e readlink
O nome ou a extensão de um arquivo não bastam para determinar seu tipo no Linux. ls -l mostra o tipo da entrada, como arquivo comum, diretório ou link, e seus atributos básicos; file examina características para inferir um formato, enquanto stat consulta metadados, como tamanho, permissões, horários e inode. Esta aula explica como interpretar essas informações e usar readlink para consultar o destino registrado em um link simbólico.
Depois de reconhecer os tipos e os metadados, você pode comparar nomes, inodes e destinos na prática em inglês sobre hard links e links simbólicos.
O que significa o tipo de arquivo no Linux?
As entradas de um sistema de arquivos incluem arquivos comuns, diretórios, links simbólicos e dispositivos. O primeiro caractere de uma linha de arquivo em ls -l identifica o tipo dessa entrada. Uma extensão, como .txt ou .jpg, faz parte do nome e não substitui esse indicador. Aqui, “tipo de arquivo” não significa o formato do sistema de arquivos, como ext4.
| Primeiro caractere | Tipo | Exemplo |
|---|---|---|
- |
Arquivo comum | Documento ou arquivo executável. |
d |
Diretório | Local que contém outras entradas. |
l |
Link simbólico | Entrada que aponta para outro caminho. |
c, b |
Dispositivo de caracteres ou de blocos | Entradas de dispositivos sob /dev. |
p, s |
FIFO, ou pipe nomeado, e socket | Entradas usadas na comunicação entre processos. |
FIFO significa “primeiro a entrar, primeiro a sair”; um pipe nomeado oferece um caminho para comunicação entre processos. Um socket é outro tipo de ponto de comunicação. Para inspecionar a entrada indicada, use ls -ld. Aplicar somente ls -l a um diretório pode listar seu conteúdo em vez dos detalhes do próprio diretório:
ls -ld /etc /etc/passwd
A linha de /etc normalmente começa com d, e a de /etc/passwd, com -. As demais colunas mostram permissões, número de links, proprietário, grupo, tamanho, data de modificação e nome. Os valores e sua apresentação variam. Se o arquivo de exemplo não existir no ambiente, use outro arquivo comum que você possa ler e substitua seu caminho nos comandos correspondentes. Uma mensagem de erro não deve ser interpretada como uma classificação.
Usar file para inferir o formato do conteúdo
file aplica testes de informações do sistema de arquivos, padrões reconhecidos e características do conteúdo para produzir uma descrição. Assim, /etc/passwd pode ser identificado como texto mesmo sem extensão:
file /etc/passwd
A saída pode ser parecida com esta. A redação depende da implementação, das regras de detecção e da codificação do arquivo:
/etc/passwd: ASCII text
O resultado é uma classificação por inspeção, e não uma certificação infalível do conteúdo ou da segurança do arquivo. Uma extensão .png, por exemplo, não transforma um texto em imagem. Se a resposta disser que o arquivo não pôde ser aberto, confira sua existência e as permissões antes de tirar conclusões sobre o formato.
Ao investigar um link simbólico, escolha explicitamente o que examinar: file -h link consulta o link, enquanto file -L link segue seu destino, em sistemas que oferecem esse suporte. Substitua link pelo caminho real. O comportamento padrão também pode depender do ambiente.
Consultar os metadados com stat
stat mostra informações mantidas pelo sistema de arquivos, sem apresentar o texto do documento. Entre elas estão tamanho, permissões, proprietário, número de inode, número de links e horários. Um inode é uma estrutura usada pelo sistema de arquivos para administrar metadados de um objeto; ele é diferente do nome pelo qual você acessa esse objeto.
stat /etc/passwd
Para reduzir a saída, o GNU stat aceita -c com uma cadeia de formatação. No exemplo, %F indica o tipo de arquivo, %s o tamanho em bytes e %n o nome:
stat -c '%F | %s bytes | %n' /etc/passwd
O resultado segue este formato de uma linha. O tamanho 1234 é fictício e serve apenas para ilustrar a posição do campo; não é uma medição do arquivo em seu computador. O tamanho real e o idioma da descrição podem ser diferentes:
regular file | 1234 bytes | /etc/passwd
O primeiro campo informa que o alvo é um arquivo comum, o campo central mostra seu tamanho em bytes e o último identifica o caminho consultado. No resultado completo de stat, Access indica o último acesso registrado, Modify a modificação dos dados, Change a alteração do estado e Birth a criação, quando disponível.
Não leia Change como “criação”: esse horário pode mudar por uma gravação ou por alterações de metadados, como permissões e proprietário. Birth pode não ser fornecido pelo sistema de arquivos ou pela ferramenta. A atualização de Access também depende das regras de montagem; ler um arquivo não garante uma mudança imediata desse campo.
Distinguir um link simbólico de seu destino
Um link simbólico é uma entrada separada que armazena um caminho. ls -l costuma mostrá-lo como link -> destino. Sem opções de resolução, readlink link imprime o texto do caminho guardado no link. Se o caminho for relativo, interprete-o a partir do diretório que contém o link, e não do diretório atual de seu shell.
Os metadados do link diferem dos metadados do arquivo apontado. Por padrão, o GNU stat examina o próprio link; com stat -L link, segue o destino. Se o link estiver quebrado, a consulta ao destino pode falhar, mesmo que a entrada do link continue existindo. A prática sobre links citada no início mostra como criar os exemplos para essa comparação.
Qual comando escolher?
- Tipo e atributos básicos na listagem:
ls -l, ouls -ldpara a entrada indicada em si. - Formato provável a partir das características do conteúdo:
file. - Tamanho, horários, inode e outros atributos detalhados:
stat. - Caminho armazenado em um link simbólico:
readlink.
Os guias de file e os formatos reconhecidos, stat e os campos de metadados e readlink e os destinos de links simbólicos apresentam opções e exemplos específicos dessas consultas.
Documentação oficial
Consulte o manual file(1), a documentação do GNU stat e a documentação do GNU readlink para verificar opções e exceções. O manual inode(7) detalha os atributos e as regras dos horários no Linux.




