Section: User Commands (1)
Updated: Con © pero se puede distribuir
Index Return to Main
Contents
file - determina el tipo de ficheros
[ -vbczL ] [ -f nombrefichero ] [ -m ficheromágico ] fichero ...
Esta página del Manual documenta la versión 3.26 de la orden file . File comprueba cada argumento en un intento de clasificarlo. Hay tres conjuntos de pruebas, efectuadas en este orden: pruebas de sistemas de ficheros, pruebas de números mágicos, y pruebas de lenguajes. La primera prueba que tenga éxito hace que se muestre el tipo del fichero.
El tipo mostrado contendrá usualmente una de las palabras text (texto: el fichero contiene solamente caracteres ASCII y probablemente es seguro leerlo en una terminal ASCII ), executable (ejecutable: el fichero contiene el resultado de la compilación de un programa en una forma comprensible para algún núcleo UNIX), o data (datos), que significa cualquier otra cosa (los datos son normalmente `binarios' o no imprimibles). Las excepciones son los formatos de ficheros bien conocidos (volcados de memoria, archivos de tar) que se sabe que contienen datos binarios. Cuando modifique el fichero /usr/share/misc/magic o el propio programa, conserve estas palabras reservadas. Muchos programas dependen de que file muestre todos los ficheros legibles de un directorio con la palabra ``text''. No haga como hicieron en la versión de Berkeley, que cambiaron ``shell commands text'' (texto con órdenes del shell) a ``shell script'' (guión del shell).
Las pruebas de sistemas de ficheros se basan en un examen de la devolución de una llamada al sistema stat(2). El programa comprueba si el fichero está vacío, o si es alguna clase de fichero especial. Cualquier tipo de fichero apropiado al sistema donde se esté (enchufes, enlaces simbólicos, o tuberías con nombre (FIFOs) en aquellos sistemas que las implementen) se intuye si está definido en el fichero de cabecera del sistema sys/stat.h.
Las pruebas de números mágicos se emplean para comprobar ficheros con datos dispuestos en formatos fijos particulares. El ejemplo canónico de esto es un fichero ejecutable binario (programa compilado) a.out, cuyo formato se describe en a.out.h y posiblemente en exec.h en el directorio normal de ficheros de cabecera. Estos ficheros tienen un `número mágico' guardado en una posición particular cerca del principio del fichero, que le dice al sistema operativo UNIX que el fichero es un binario ejecutable, y de qué tipo de entre unos cuantos. El concepto de `número mágico' se ha aplicado por extensión a ficheros de datos. Cualquier fichero con algún identificador invariante en una posición fija y cercana al principio en el fichero puede normalmente describirse de esta forma. La información de estos ficheros se lee del `fichero mágico' /usr/share/misc/magic.
Si un argumento resulta ser un fichero ASCII, file intenta adivinar el lenguaje en el que está escrito. Las pruebas de lenguaje buscan cadenas de caracteres particulares (cf. names.h) que pueden aparecer en cualquier lugar dentro de los primeros bloques de un fichero. Por ejemplo, la palabra clave .br indica que el fichero es con mucha probabilidad un fichero de entrada de troff(1), mientras que la palabra struct puede indicar un programa en C. Estas pruebas son menos confiables que las de los dos grupos anteriores, de forma que se realizan en último lugar. Las rutinas de pruebas de lenguajes también hacen algunas otras comprobaciones (como buscar archivos de tar(1)) y determinan si el mensaje para un fichero desconocido debe ser `ascii text' (texto ASCII) o `data' (datos).
- lista predeterminada de números mágicos
La variable de entorno MAGIC se puede emplear para establecer los ficheros predeterminados con números mágicos.
(4)
- descripción del formato del fichero mágico.
strings(1),
od(1),
hexdump(1)
- herramientas para examinar ficheros que no son de texto.
Se cree que este programa excede en comportamiento al descrito por SVID en FILE(CMD), tanto como uno pueda deducir del vago lenguaje contenido en dicho documento. Su comportamiento es mayormente compatible con el programa de System V del mismo nombre. Esta versión sabe de más números mágicos, sin embargo, por lo que producirá una salida diferente (si bien más acertada) en muchos casos.
La diferencia más significante entre esta versión y la de System
V es que esta versión trata cualquier espacio en blanco como un
delimitador, de forma que los espacios en cadenas de patrones deben
ser protegidos. Por ejemplo,
>10 string language
impress (imPRESS data)
en un fichero mágico existente tendría que cambiarse a
>10 string language\
impress (imPRESS data)
Además, en esta versión, si una cadena patrón contiene una barra
inclinada invertida, debe ser protegida. Por ejemplo
0 string \begindata Andrew
Toolkit document
en un fichero mágico existente tendría que cambiarse a
0 string \\begindata Andrew
Toolkit document
SunOS en distribuciones 3.2 y siguientes, de Sun Microsystems,
incluye una orden file(1)
derivada de la de System V, pero con algunas extensiones. Mi
versión difiere de la de Sun sólo en pequeñas cosas. Incluye la
extensión del operador `&', empleado como, por ejemplo,
>16 long&0x7fffffff >0
not stripped
Las entradas del fichero mágico han sido tomadas de varias fuentes, principalmente de USENET, y han contribuido varios autores. Christos Zoulas (su dirección está más abajo) recogerá entradas adicionales o corregidas del fichero mágico. Se distribuirá periódicamente una consolidación de las entradas del fichero mágico.
El orden de las entradas en el fichero mágico es significativo. Dependiendo del sistema que esté Ud. usando, el orden en el que estén puestas juntas puede ser incorrecto. Si su vieja orden file emplea un fichero mágico, mantenga el viejo fichero mágico por ahí para comparación (por ejemplo, renómbrelo a /usr/local/share/magic.orig).
Ha habido una orden file en cada UNIX desde al menos la Versión 6 de Investigación (estando fechada la página del Manual en Enero de 1975). La versión de System V introdujo un cambio importante significativo: la lista externa de tipos con números mágicos. Esto ralentizaba algo el programa pero lo hacía mucho más flexible.
Este programa, basado en la versión de System V, ha sido escrito por Ian Darwin sin mirar el código fuente de nadie.
John Gilmore revisó extensamente el código, haciéndolo mejor que la primera versión. Geoff Collyer encontró algunas cosas inadecuadas y proporcionó algunas entradas del fichero mágico. Desde entonces el programa ha ido evolucionando continuamente.
Escrito por Ian F. Darwin, dirección UUCP {utzoo | ihnp4}!darwin!ian, dirección Internet [email protected], dirección postal: P.O. Box 603, Station F, Toronto, Ontario, CANADÁ M4Y 2L8.
Alterado por Rob McMahon, [email protected], en 1989, para extender el operador `&' de un simple `x&y != 0' a `x&y op z'.
Alterado por Guy Harris, [email protected], en 1993, para:
poner el operador `&' ``al viejo estilo'' de nuevo como estaba, porque 1) el cambio de Rob McMahon rompió con el estilo de uso anterior, 2) el operador al ``nuevo estilo'' `&' de SunOS, que esta versión de file también admite, ya maneja también `x&y op z', y 3) el cambio de Rob no estaba documentado en ningún caso;
añadir múltiples niveles de `>';
añadir las palabras clave ``beshort'', ``leshort'', etc., para buscar números en el fichero en un orden de bytes específico, en vez de en el orden de bytes nativo del proceso que esté ejecutando a file.
Cambios por Ian Darwin y varios autores incluyendo a Christos Zoulas ([email protected]), 1990-1997.
Derechos de copia © Ian F. Darwin, Toronto, Canadá, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993.
Este software no está sujeto y no puede hacerse estarlo a cualquier licencia de la Cía. AT&T, Sun Microsystems Inc., Digital Equipment Co. Inc. (Compaq), Lotus Development Inc., los Regentes de la Universidad de California, el Consorcio X ni MIT, ni la FSF (Fundación del Software Libre).
Este software no está sujeto a ninguna restricción de exportación del Departamento de Comercio de EE.UU., y puede exportarse a cualquier país o planeta.
Se permite a cualquiera usar este software para cualquier propósito en cualquier sistema computador, y alterarlo y redistribuirlo libremente, sujeto a las siguientes restricciones:
1. El autor no es responsable de las consecuencias del uso de este software, sin importar cuán malas fueren, incluso si sobrevienen a causa de defectos en él.
2. El origen de este software no debe ser malinterpretado o alterado, bien sea explícitamente o por omisión. Puesto que son pocos los usuarios que alguna vez leen los fuentes, los créditos deben aparecer en la documentación.
3. Las versiones alteradas deben marcarse explícitamente como tales, y no pueden hacerse aparecer como si fueran el software original. Puesto que son pocos los usuarios que alguna vez leen los fuentes, los créditos deben aparecer en la documentación.
4. Esta nota no puede ser quitada ni alterada (espero que sí pueda ser traducida, N. del T. :-).
Unos pocos ficheros de soporte (getopt, strtok) distribuidos con este paquete son de Henry Spencer y están sujetos a los mismos términos que los de arriba.
Unos pocos ficheros simples de soporte (strtol, strchr) distribuidos con este paquete están en el dominio público; así quedan marcados.
Los ficheros tar.h e is_tar.c fueron escritos por John Gilmore a partir de su programa tar de dominio público, y no están cubiertos por las restricciones de antes.
Debe haber una forma mejor de automatizar la construcción del fichero Magic a partir de todo lo de Magdir. ¿Cuál será? Aún mejor, el fichero mágico debería compilarse a forma binaria (digamos, ndbm(3) o, mejor todavía, cadenas ASCII de longitud fija para su empleo en entornos de red heterogéneos) para un arranque más rápido. Entonces el programa se ejecutaría tan rápido como el de la Versión 7 del mismo nombre, con la flexibilidad de la versión System V.
File emplea algunos algoritmos que favorecen la rapidez sobre el acierto, de modo que puede equivocarse al adivinar los contenidos de ficheros ASCII.
El soporte para ficheros ASCII (sobre todo para lenguajes de programación) es simplista, ineficiente, y requiere recompilación para actualizarse.
Debería haber una cláusula ``else'' para seguir una serie de líneas de continuación.
El fichero mágico y las palabras clave deberían admitir expresiones regulares. Su empleo del TAB ASCII como un delimitador de campo es feo y hace difícil editar los ficheros, pero es inamovible.
Podría ser interesante permitir letras mayúsculas en las palabras clave; por ejemplo, órdenes troff(1) frente a macros de páginas man. El soporte de expresiones regulares haría esto más fácil.
Al programa no le gusta FORTRAN. Debería ser capaz de figurarse si el fichero es un programa en FORTRAN viendo algunas palabras reservadas que aparezcan sangradas al principio de la línea. El soporte de expresiones regulares haría esto más fácil.
La lista de palabras clave de ascmagic probablemente deba pertenecer al fichero Magic. Esto podría hacerse usando alguna palabra clave como `*' para el valor de desplazamiento.
Otra mejora sería ordenar el fichero mágico de modo que podamos simplemente ejecutar todas las pruebas para el primer byte, primera palabra, primera palabra larga, etc., una vez que la hayamos cogido. Protestar de conflictos en las entradas del fichero mágico. ¿Construir una regla para que las entradas mágicas se ordenen basadas en el desplazamiento dentro del fichero en vez de en la posición dentro del fichero mágico?
El programa podría proporcionar una forma de dar una estimación de ``cuán buena'' es una estimación. Acabamos quitando adivinaciones (p.ej. ``From '' como los 5 primeros caracteres de un fichero) porque no eran tan buenas como otras tentativas (p. ej. ``Newsgroups:'' frente a "Return-Path:"). Pero aún, si las otras no fueran buenas, debería ser posible utilizar la primera adivinación.
Este programa es más lento que algunas órdenes file comerciales.
Esta página del Manual, y particularmente esta sección, es demasiado larga.
Se puede obtener la última versión original del autor mediante FTP anónimo en ftp.astron.com en el archivo /pub/file/file-X.YY.tar.gz.
This document was created by man2html, using
the manual pages.
Time: 20:28:05 GMT, January 21, 2005