NOMBRE¶
magic - fichero de números mágicos para la orden file
DESCRIPCIÓN¶
Esta página del Manual documenta el formato del fichero mágico que
emplea la orden
file(1), versión 3.26. La orden
file
identifica el tipo de un fichero utilizando, entre otras pruebas, una que mira
si el fichero empieza con un cierto
número mágico. El
fichero
/usr/share/misc/magic especifica qué números
mágicos hay que buscar, qué mensaje mostrar si se encuentra un
número mágico en particular, e información adicional que
haya que extraer del fichero.
Cada línea del fichero especifica una prueba a realizar. Una prueba
compara los datos que comiencen en una posición particular en el
fichero con un valor numérico de 1, 2 ó 4 bytes o una cadena de
caracteres. Si la prueba tiene éxito, se muestra un mensaje. La
línea consiste en los campos siguientes:
- desplazamiento
- Un número que especifica el desplazamiento, en bytes, desde el
principio del fichero de datos que se esté comprobando.
- tipo
- El tipo de los datos a comprobar. Los valores posibles son:
- byte
- Un valor de un byte.
- short
- Un valor de dos bytes (en la mayoría de los sistemas) en el orden
de bytes nativo de la máquina.
- long
- Un valor de cuatro bytes (en la mayoría de los sistemas) en el
orden de bytes nativo de la máquina.
- string
- Una cadena de bytes.
- date
- Un valor de cuatro bytes interpretado como una fecha de Unix.
- beshort
- Un valor de dos bytes (en la mayoría de los sistemas) en orden de
bytes ascendiente hacia la derecha.
- belong
- Un valor de cuatro bytes (en la mayoría de los sistemas) en orden
de bytes ascendente hacia la derecha.
- bedate
- Un valor de cuatro bytes (en la mayoría de los sistemas) en orden
de bytes ascendente hacia la derecha, interpretado como una fecha de
Unix.
- leshort
- Un valor de dos bytes (en la mayoría de los sistemas) en orden de
bytes ascendente hacia la izquierda.
- lelong
- Un valor de cuatro bytes (en la mayoría de los sistemas) en orden
de bytes ascendente hacia la izquierda.
- ledate
- Un valor de cuatro bytes (en la mayoría de los sistemas) en orden
de bytes ascendente hacia la izquierda, interpretado como una fecha de
Unix.
Los tipos numéricos pueden opcionalmente ir seguidos por
& y
un valor numérico, para especificar la operación de bits Y con
dicho valor antes de que se realice la comparación. Preceder el tipo de
una
u indica que las comparaciones ordenadas deben hacerse sobre
valores sin signo.
- test
- El valor a ser comparado con el valor del fichero. Si el tipo es
numérico, este valor se especifica como en el lenguaje C; si es una
cadena, como una cadena de caracteres de C, permitiéndose las
secuencias de escape habituales (como \n para la nueva línea).
- Los valores numéricos pueden hacerse preceder por un
carácter que indique la operación a realizarse. Puede ser
=, para especificar que el valor del fichero debe igualar al
especificado, <, para especificar que el valor del fichero debe
ser menor que el valor especificado, >, para especificar que el
valor del fichero debe ser mayor que el valor especificado, &,
para especificar que el valor del fichero debe tener a 1 todos los bits
que estén a 1 en el valor especificado, ^, para especificar
que el valor del fichero debe tener a 0 cualquiera de los bits que
estén a 1 en el valor especificado, o x, para especificar
que cualquier valor concordará. Si el carácter se omite, se
asume que es =.
- Los valores numéricos se especifican como en C; por ejemplo,
13 es en base diez, 013 es octal, y 0x13 es
hexadecimal.
- Para valores de cadena, la cadena de bytes del fichero debe concordar con
la cadena de bytes especificada. Los operadores =, < y
> (pero no &) pueden aplicarse a cadenas. La longitud
empleada para la concordancia es la del argumento cadena en el fichero
mágico. Esto significa que una línea puede concordar con
cualquier cadena, y por tanto presumiblemente mostrarla, haciendo
>\0 (porque todas las cadenas son mayores que la cadena
nula).
- mensaje
- EL mensaje a mostrarse si la comparación tiene éxito. Si la
cadena contiene una especificación de formato como las de
printf(3S), el valor del fichero (con cualquier enmascaramiento
especificado ya realizado) se muestra empleando el mensaje como la cadena
de formato.
Algunos formatos de fichero contienen información adicional que se
mostrará junto con el tipo del fichero. Una línea que comience
con el carácter
> indica pruebas y mensajes a mostrarse
adicionales. El número de
> en la línea indica el
nivel de la prueba; una línea sin ningún
> al
principio se considera que está en el nivel 0. Cada línea en el
nivel
n+1 está bajo el control de la línea en el
nivel
n más cercano que la preceda en el fichero mágico.
Si la prueba en una línea en el nivel
n tiene éxito, se
realizan las pruebas especificadas en todas las líneas subsiguientes en
el nivel
n+1 y se muestran los mensajes si las pruebas tienen
éxito. La línea siguiente en el nivel
n termina con esto.
Si el primer carácter que siga al último
> es un
( entonces la cadena tras el paréntesis se interpreta como un
desplazamiento indirecto. Eso significa que el número tras el
paréntesis se emplea como un desplazamiento en el fichero. Se lee el
valor en tal desplazamiento, y se emplea de nuevo como un desplazamiento en el
fichero. Los desplazamientos indirectos son de la forma:
((x[.[bslBSL]][+-][y]). El valor de
x se emplea como un desplazamiento en el fichero. Se lee en tal sitio
un byte, un entero corto o uno largo, dependiendo del especificador de tipo
[bslBSL]. Los tipos en mayúsculas interpretan el número
como un valor ascendente hacia la derecha, mientras que las versiones en
minúsculas lo interpretan como ascendente hacia la izquierda. A ese
número se le suma el valor de
y y el resultado se emplea como un
desplazamiento en el fichero. El tipo predeterminado si no se especifica uno
es long, un entero largo.
A veces uno no sabe la posición exacta puesto que ésta depende de
la longitud de los campos anteriores. Entonces se puede especificar un
desplazamiento o posición relativa al final del último campo del
nivel superior (por supuesto esto sólo puede hacerse para pruebas en
subniveles, como en las que empiezan con
>). Tal desplazamiento
relativo se especifica empleando
& como prefijo del desplazamiento.
FALLOS¶
Los formatos
long,
belong,
lelong,
short,
beshort,
leshort,
date,
bedate, y
ledate
son dependientes del sistema; quizás deberían especificarse como
un número de bytes (2B, 4B, etc.), puesto que los ficheros que se
están reconociendo vienen normalmente de un sistema en el que las
longitudes son invariantes.
No hay (actualmente) soporte para que se empleen datos con sexo (endianess)
especificado en desplazamientos indirectos.
VÉASE TAMBIÉN¶
file(1) - la orden que lee este fichero.