Comando file: Detectando Tipos de Arquivo
O Que Voce Vai Aprender
- Como o comando
filejulga o tipo de um arquivo pelo conteudo, nao pela extensao - Por que
filevee alem de uma extensao renomeada - Como ler um tipo MIME com
file -i - Opcoes uteis como
-be tratamento de arquivos comprimidos
Resumo Rapido
file NOMEdiz o que um arquivo realmente e de uma so vez- Ele decide com base nos bytes iniciais (o magic number), nao na extensao
- Renomeie um JPEG para
.txtefileainda o identifica como JPEG
Premissas
- SO: Ubuntu / Linux tipico
fileja vem pre-instalado (seu proprio pacotefile, separado do coreutils)
1. O Que e o Comando file e Como Ele Difere das Extensoes?
Conclusao: file le o conteudo de um arquivo para determinar seu tipo, julgando pelos bytes reais em vez da extensao autodeclarada.
foto.jpg, para saber o tipo?file le o conteudo em si para decidir.file o le.file report.pdf
report.pdf: PDF document, version 1.7
file depende de um banco de dados de padroes (libmagic) compilado em magic.mgc (fonte em /usr/share/misc/magic). Milhares de assinaturas de formato estao registradas la.
2. Por Que Voce Nao Pode Confiar na Extensao?
Conclusao: Uma extensao e apenas parte do nome e nao garante nada. Como file julga pelo conteudo, nao e enganado por uma extensao falsa.
.txt, ou um arquivo do Windows chegue sem extensao. Nesses casos, voce quer confirmar o conteudo 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?
Conclusao: file NOME e a forma basica. Passe varios 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
Diretorios, links simbolicos e arquivos vazios sao identificados como directory, symbolic link to ... e empty respectivamente.
4. Como Obter o Tipo MIME? (-i)
Conclusao: file -i retorna um tipo MIME como
text/plain; charset=us-ascii, que e conveniente para scripts.
text/plain que eu vejo as vezes — o file pode imprimir isso?-i (--mime) e voce obtem a forma de tipo MIME, que e facil para programas parsearem. O conjunto de caracteres (charset) tambem e mostrado.file -i notes.txt file -i report.pdf
notes.txt: text/plain; charset=us-ascii report.pdf: application/pdf; charset=binary
Quando voce quer apenas o tipo ou apenas a codificacao, use --mime-type / --mime-encoding.
file --mime-type photo.png
photo.png: image/png
5. Quais Opcoes Vale a Pena Conhecer?
Conclusao: Conhecer -b (omitir nome), -L (seguir links), -z (olhar dentro de arquivos comprimidos) e -s (arquivos de dispositivo) e suficiente para a maioria do trabalho.
| Opcao | Significado |
|---|---|
-b / --brief |
Imprimir apenas o tipo, sem o nome do arquivo |
-i / --mime |
Saida em formato de tipo MIME |
-L |
Seguir link simbolico e julgar seu destino |
-z |
Olhar dentro de arquivo comprimido para julga-lo |
-s |
Ler arquivos de dispositivo de bloco / caractere |
-k |
Continuar em vez de parar na primeira correspondencia |
-b e util?-b e mais facil.file -b script.sh
Bourne-Again shell script, ASCII text executable
Com -z voce pode confirmar "que tipo de compressao mais o tipo do arquivo interno" sem descompactar um .gz.
file -z logs.tar.gz
6. Onde Ele e Usado no Trabalho Real?
Conclusao: Confirmar a identidade de um arquivo baixado, distinguir texto de binario e verificar um arquivo comprimido antes de extrair sao usos comuns.
curl e realmente o que voce queria. Uma unica verificacao com file diz se uma pagina 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, voce baixou uma pagina de erro, nao um arquivo comprimido. Detectar isso antes da extracao e o valor do file.
7. Quais Sao as Armadilhas Comuns?
Conclusao: file faz uma estimativa, nao uma garantia. Esquecer -L para symlinks ou -s para arquivos de dispositivo e voce obtem resultados inesperados.
A saida do file e uma estimativa. Formatos personalizados sem magic number, ou arquivos curtos demais para amostrar, podem ser relatados vagamente como data ou ASCII text. Para decisoes criticas, combine com outras ferramentas (stat, checksums, etc.).
file em um link simbolico, ele so mostrou informacao sobre o link em si.-L.file -L /usr/bin/python3
8. Mini Exercicio
Conclusao: A pratica hands-on fixa o conhecimento. Confirme voce mesmo que file vee alem de uma extensao alterada.
Tente Voce
- 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 extensao muda?
Resposta Exemplo
Imprime sample.bin: ASCII text. O conteudo nao mudou, entao o veredito (ASCII text) tambem nao muda — prova de que file nao depende da extensao.