Gestionar fitxers i directoris a Linux

La comanda file a Linux: saber de quin tipus és un fitxer



La comanda file et diu de quin tipus és un fitxer mirant-ne el contingut, no el nom. A Linux l’extensió és només una convenció: un .jpg pot ser en realitat un ZIP, i un fitxer sense extensió pot ser un script, un executable o un document de text. file llegeix els primers bytes, els compara amb una base de dades de signatures (els magic numbers) i et dona la resposta.

Sintaxi

file [opcions] fitxer...

Opcions més útils

OpcióQuè fa
-bMostra només el resultat, sense el nom del fitxer (útil en scripts)
-iMostra el tipus MIME i la codificació (text/plain; charset=utf-8)
--mime-typeNomés el tipus MIME
--mime-encodingNomés la codificació de caràcters
-LSegueix els enllaços simbòlics i analitza el fitxer on apunten
-zMira dins dels fitxers comprimits
-sLlegeix també dispositius de blocs i de caràcters (particions, discos)
-f llistaLlegeix els noms dels fitxers que ha d’analitzar d’un fitxer

Exemples

Analitzar tots els fitxers d’un directori:

$ file *
antic.txt:    ISO-8859 text, with CRLF line terminators
carpeta:      directory
copia.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 10240
dades.json:   JSON text data
enllac:       symbolic link to notes.txt
foto.jpg:     gzip compressed data, from Unix, original size modulo 2^32 10240
imatge.png:   PNG image data, 1 x 1, 8-bit/color RGB, non-interlaced
notes.txt:    Unicode text, UTF-8 text
programa:     ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=87a7eadc711cd002f7b00ba923179e5713498159, for GNU/Linux 3.7.0, stripped
script.sh:    Bourne-Again shell script, ASCII text executable

Fixa’t en uns quants detalls:

  • foto.jpg no és una imatge: és un fitxer comprimit amb gzip al qual algú ha posat l’extensió .jpg. file no s’ha deixat enganyar.
  • antic.txt és text en ISO-8859 (Latin-1) amb finals de línia de Windows (CRLF), mentre que notes.txt és UTF-8. És la pista per convertir-lo amb iconv.
  • programa és un executable ELF de 64 bits per a ARM (aarch64): no funcionarà en un PC x86_64. Mira la fitxa d’arch.
  • script.sh és un script de Bash; file ho sap per la primera línia (#!/bin/bash).

Saber el tipus MIME i la codificació:

$ file -i notes.txt antic.txt imatge.png
notes.txt:  text/plain; charset=utf-8
antic.txt:  text/plain; charset=iso-8859-1
imatge.png: image/png; charset=binary

Només la codificació, abans de convertir un fitxer de text:

$ file --mime-encoding notes.txt antic.txt
notes.txt: utf-8
antic.txt: iso-8859-1

Resultat net per fer-lo servir en un script:

$ file -b --mime-type foto.jpg
application/gzip

Mirar dins d’un fitxer comprimit:

$ file -z copia.tar.gz
copia.tar.gz: POSIX tar archive (GNU) (gzip compressed data, from Unix)

Seguir un enllaç simbòlic:

$ file enllac
enllac: symbolic link to notes.txt
$ file -L enllac
enllac: Unicode text, UTF-8 text

Saber quin sistema de fitxers té una partició (cal ser root per llegir el dispositiu):

sudo file -s /dev/sda1

Per a què et serà útil

  • Abans d’obrir o executar un fitxer que has baixat o que t’han enviat: comprova que és el que diu ser.
  • Problemes d’accents: saber si un fitxer de text és UTF-8 o Latin-1 abans de convertir-lo.
  • Exec format error (o un No such file or directory estrany) en executar un programa que existeix: sovint és un binari d’una altra arquitectura o de 32 bits en un sistema de 64, i file t’ho diu de seguida.
  • Fitxers sense extensió dins de /usr/bin, /etc o un directori de còpies de seguretat.

Compte amb…

file fa una suposició basada en signatures, no una validació completa. Un fitxer pot tenir una capçalera correcta i estar corrupte, i un fitxer de text curt es pot identificar de manera imprecisa. Tampoc et diu si un fitxer és segur: un PDF o un document d’Office maliciós continua sent un PDF o un document d’Office.

Comandes relacionades

  • iconv: convertir la codificació d’un fitxer de text.
  • ls: ls -F marca els directoris, executables i enllaços.
  • blkid: tipus de sistema de fitxers i UUID de les particions.
  • arch: arquitectura del sistema.
  • which: on és un executable (file $(which ls)).