# File (Unix)

file es un comando de la familia de los sistemas operativos Unix, que permite detectar el tipo y formato de un archivo. Para lograrlo, analiza el encabezado, el número mágico o bien el contenido que el archivo posea.

## Descripción

El comando file es una utilidad que realiza una serie de pruebas (test) para determinar el tipo y formato de un archivo. Más precisamente las pruebas son tres, y la primera que permita alcanzar un resultado hace que el análisis finalice.
Se detallan a continuación dichas pruebas, en el orden en que se llevan a cabo por este comando:
* Sistema de archivos: se intenta determinar si el archivo a examinar es un archivo del sistema por medio de la función (system call) stat. Gracias a esta prueba se puede determinar si es un dispositivo, enlace simbólico, una tubería, etc.
* Números mágicos: Se intenta determinar el tipo, analizando determinados bytes ubicados en específicas posiciones dentro del archivo. Estos bytes se los denomina números mágicos, y suelen estar al comienzo de la cabecera. La información para realizar dicho análisis figura en el archivo /usr/share/misc/magic.mgc.
* Prueba de sintaxis: esta última prueba consiste en determinar que tipo de sintaxis posee un archivo de texto. Esta prueba solo se realiza sobre los archivos que se haya determinado que sean texto plano. Básicamente consiste en buscar la presencia de determinadas palabras claves que permiten identificar la sintaxis usada dentro de dicho archivo.

## Modo de uso

La invocación del comando file tiene el siguiente formato:
* file [PARÁMETROS] ARCHIVO...
Los parámetros posibles, según la especificación POSIX, son:

### -d

    Realiza las pruebas de sintaxis y de números mágicos del sistema. Esta es la opción por defecto, alternativamente se puede utilizar -m o -M

### -h

    Si el archivo a analizar es un enlace simbólico, lo identifica como tal.

### -i

    No brindar una clasificación adicional más allá de la del tipo básico.

### -m archivo

    Realiza una prueba adicional de números mágicos con el archivo indicado

### -M archivo

    Similar a -m, salvo que no realiza las pruebas de sintaxis y de números mágicos por defecto del sistema.
En los sistemas operativos GNU/Linux, este comando fue enriquecido con muchos más parámetros, entre los cuales se encuentran:

### -b

    No imprime el nombre del archivo en cada resultado.

### -i

    Muestra el tipo mime junto con la codificación utilizada.

### -e prueba

    Excluye de realizar la prueba indicada. Entre las opciones que podemos indicarle, se encuentran:

      ### apptype

          Tipo de aplicación EMX (solo para EMX).

      ### ascii

          Varios tipos de archivos de texto. Esta prueba intenta determinar la codificación, más allá de la indicada dentro del propio archivo.

      ### encoding

          Varios tipos de codificaciones para la prueba suave de números mágicos.

      ### tokens

          Busca cadenas conocidas dentro de los archivos de texto.

      ### cdf

          Muestra detalles de los archivos CDF (Compound Document Files). POr ejemplo SVG, XHTML, etc.

      ### compress

          Analiza y busca dentro de los archivos comprimidos.

      ### elf

          Muestra detalles de archivos ELF.

      ### soft

          Consulta de archivos mágicos.

      ### tar

          Analiza archivos Tar.

### --mime-type

    similar a -i, salvo porque solo muestra el tipo mime.

### -z

    Examina los archivos comprimidos.

## Ejemplos

Visualizar información del tipo y formato de un archivo:
file archivo.mp3
Resultado:
Visualizar solo el tipo mime de un archivo:
file --mime-type archivo.mp3
Resultado: