Comando file: Detectando Tipos de Arquivo
O Que Você Vai Aprender
- Como o comando
filejulga o tipo de um arquivo pelo conteúdo, não pela extensão - Por que
filevee além de uma extensão renomeada - Como ler um tipo MIME com
file -i - Opções úteis como
-be tratamento de arquivos comprimidos
Resumo Rápido
file NOMEdiz o que um arquivo realmente é de uma só vez- Ele decide com base nos bytes iniciais (o magic number), não na extensão
- Renomeie um JPEG para
.txtefileainda o identifica como JPEG
Premissas
- SO: Ubuntu / Linux típico
filejá vem pré-instalado (seu próprio pacotefile, separado do coreutils)
1. O Que é o Comando file e Como Ele Difere das Extensões?
Conclusão: file lê o conteúdo de um arquivo para determinar seu tipo, julgando pelos bytes reais em vez da extensão autodeclarada.
foto.jpg, para saber o tipo?file lê o conteúdo em si para decidir.file o lê.file report.pdf
report.pdf: PDF document, version 1.7
file depende de um banco de dados de padrões (libmagic) compilado em magic.mgc (fonte em /usr/share/misc/magic). Milhares de assinaturas de formato estão registradas lá.
2. Por Que Você Não Pode Confiar na Extensão?
Conclusão: Uma extensão é apenas parte do nome e não garante nada. Como file julga pelo conteúdo, não é enganado por uma extensão falsa.
.txt, ou um arquivo do Windows chegue sem extensão. Nesses casos, você quer confirmar o conteúdo real..txt.mv penguin.jpg penguin.txt file penguin.txt
penguin.txt: JPEG image data, JFIF standard 1.01, resolution (DPI), 72x72
.txt, mas ele ainda viu que era um JPEG!3. Como Usar o Comando file?
Conclusão: file NOME é a forma básica. Passe vários nomes ou um curinga para verificar muitos arquivos de uma vez.
* para verificar todos juntos.file notes.txt file *
notes.txt: ASCII text archive.tar.gz: gzip compressed data, original size modulo 2^32 10240 script.sh: Bourne-Again shell script, ASCII text executable image.png: PNG image data, 800 x 600, 8-bit/color RGBA, non-interlaced
Diretórios, links simbólicos e arquivos vazios são identificados como directory, symbolic link to ... e empty respectivamente.
4. Como Obter o Tipo MIME? (-i)
Conclusão: file -i retorna um tipo MIME como
text/plain; charset=us-ascii, que é conveniente para scripts.
text/plain que eu vejo às vezes — o file pode imprimir isso?-i (--mime) e você obtém a forma de tipo MIME, que é fácil para programas parsearem. O conjunto de caracteres (charset) também é mostrado.file -i notes.txt file -i report.pdf
notes.txt: text/plain; charset=us-ascii report.pdf: application/pdf; charset=binary
Quando você quer apenas o tipo ou apenas a codificação, use --mime-type / --mime-encoding.
file --mime-type photo.png
photo.png: image/png
5. Quais Opções Vale a Pena Conhecer?
Conclusão: Conhecer -b (omitir nome), -L (seguir links), -z (olhar dentro de arquivos comprimidos) e -s (arquivos de dispositivo) é suficiente para a maioria do trabalho.
| Opção | Significado |
|---|---|
-b / --brief |
Imprimir apenas o tipo, sem o nome do arquivo |
-i / --mime |
Saída em formato de tipo MIME |
-L |
Seguir link simbólico e julgar seu destino |
-z |
Olhar dentro de arquivo comprimido para julgá-lo |
-s |
Ler arquivos de dispositivo de bloco / caractere |
-k |
Continuar em vez de parar na primeira correspondência |
-b é útil?-b é mais fácil.file -b script.sh
Bourne-Again shell script, ASCII text executable
Com -z você pode confirmar "que tipo de compressão mais o tipo do arquivo interno" sem descompactar um .gz.
file -z logs.tar.gz
6. Onde Ele é Usado no Trabalho Real?
Conclusão: Confirmar a identidade de um arquivo baixado, distinguir texto de binário e verificar um arquivo comprimido antes de extrair são usos comuns.
curl é realmente o que você queria. Uma única verificação com file diz se uma página de erro HTML foi baixada no lugar.curl -sL https://example.com/app.tar.gz -o app.tar.gz file app.tar.gz
app.tar.gz: gzip compressed data, ...
Se disser HTML document aqui, você baixou uma página de erro, não um arquivo comprimido. Detectar isso antes da extração é o valor do file.
7. Quais São as Armadilhas Comuns?
Conclusão: file faz uma estimativa, não uma garantia. Esquecer -L para symlinks ou -s para arquivos de dispositivo e você obtém resultados inesperados.
A saída do file é uma estimativa. Formatos personalizados sem magic number, ou arquivos curtos demais para amostrar, podem ser relatados vagamente como data ou ASCII text. Para decisões críticas, combine com outras ferramentas (stat, checksums, etc.).
file em um link simbólico, ele só mostrou informação sobre o link em si.-L.file -L /usr/bin/python3
8. Mini Exercício
Conclusão: A prática hands-on fixa o conhecimento. Confirme você mesmo que file vee além de uma extensão alterada.
Tente Você
- Crie algum texto:
echo "hello" > sample.txt - Verifique o tipo:
file sample.txt - Renomeie:
mv sample.txt sample.bin - Verifique novamente:
file sample.bin— o resultado muda quando a extensão muda?
Resposta Exemplo
Imprime sample.bin: ASCII text. O conteúdo não mudou, então o veredito (ASCII text) também não muda — prova de que file não depende da extensão.