FILE(1)

NOME
file - determina o tipo do arquivo

SINOPSE
file [ -vbczL ] [ -f arquivo ] [ -m lista ] file ...

DESCRIÇÃO
Esta página de manual documenta a versão 3.24 do comando file. File testa cada argumento na tentativa de classificá-lo. Há três conjuntos de testes que são executados na seguinte ordem: testes de sistemas de arquivos, de números mágicos e testes de linguagem. O primeiro teste que for bem sucedido provoca a apresentação do tipo do arquivo.

O tipo de arquivo impresso normalmente contém uma das seguintes palavras text (texto) (o arquivo contém somente caracteres ASCII e provavelmente poderá ser lido sem problemas em um terminal ASCII) , executable (executável) (o arquivo contém o resultado da compilação de um programa, em um formato compreensível por algum kernel UNIX ou outro), ou data (dados) significando qualquer outra coisa (dados são geralmente binários ou não imprimíveis). Exceções são bem conhecidas (arquivos core, arquivos tar,...) que são conhecidos por conterem dados binários. Ao modificar o arquivo /usr/share/magic ou o próprio programa, preserve estas palavras chaves. Pessoas muitas vezes dependem da saída da palavra ``text'' para saber que todos os arquivos em um diretório podem ser lidos. Não faça como a Berkeley fez - mudar ``shell commands text'' para ``shell script''.

Os testes de sistemas de arquivos estão baseados no retorno da chamada ao sistema stat(2). O programa checa para verificar se o arquivo está vazio, ou se há alguma espécie de arquivo especial. Qualquer tipo de arquivo conhecido e adequado ao sistema que está sendo executado (sockets, links simbólicos, e named pipes (FIFOs) nos sistema que o disponibilizam) são checados no arquivo header de sistema sys/stat.h.

Os testes de número mágico são usados para verificar os arquivos com dados em um formato fixo em particular. O exemplo canônico para um binário executável (programa compilado)com um arquivo a.out, cujo formato é definido em a.out.h e possivelmente em exec.h que é o padrão incluído dos diretórios. Estes arquivos têm um `número mágico' armazenado em um local em particular, próximo ao início do arquivo que diz ao sistema operacional UNIX que o arquivo é um binário executável O conceito de `número mágico' foi aplicado por extensão a arquivos de dados. Qualquer arquivo com algum identificador invariável em um pequeno deslocamento no arquivo e que o arquivo pode ser identificado por esta característica pode ser definido pelo comando file. A informação destes arquivos é obtida através do arquivo /usr/share/magic.

Se um argumento aparenta ser um arquivo ASCII , file tenta adivinhar sua linguagem. O teste de linguagem procura por seqüências de caracteres específicas (conforme o definido em names.h) que podem aparecer em qualquer lugar nos primeiros blocos de um arquivo. Por exemplo, a palavra chave .br indica que o arquivo se parece mais com um arquivo de entrada troff(1) , e uma palavra como struct indica um programa C. Estes testes são menos confiáveis dos que os dois grupos anteriores, sendo então executados ao final. As rotinas de testes de linguagem buscam por diversos tipos de arquivos (como por exemplo arquivos tar(1)) e determina se um arquivo desconhecido pode ser denominado como `ascii text' ou `data'.

OPÇÕES

-v  Lista a versão do programa e finaliza.

-m list
    Especifica uma lista alternativa contendo os números mágicos. Esta pode ser um único arquivo ou uma lista de arquivos separada por vírgulas.

-z  Tenta verificar arquivos dentro de arquivos maiores compactados.

-b  Não inclui os nomes de arquivos nas linhas de saída (modo rápido).

-c  Gera uma listagem para checagem dos valores passados em um arquivo de números mágicos. Este é normalmente usado em conjunção com o parâmetro -m para validar um arquivo de números mágicos antes de instalá-lo.

-f nome_arquivo
    Lê os nomes dos arquivos a serem examinados a partir de nome_arquivo (um por linha) antes da lista de argumentos. Ou o nome_arquivo ou ao menos um argumento contendo o nome do arquivo deve estar presente; para testar a partir da entrada padrão, use ``-'' como um argumento como nome de arquivo.

-L  faz com que links simbólicos sejam seguidos, como uma opção de link do ls(1). (em sistemas que suportam links simbólicos).

ARQUIVOS
/usr/share/magic - lista padrão de números mágicos

AMBIENTE
A variável de ambiente MAGIC pode ser usado para definir os arquivos de números mágicos.

VEJA TAMBÉM
magic(4) - descrição do formato do arquivo mágico.
strings(1), od(1), hexdump(1) - ferramentas para examinar arquivos que não sejam do tipo texto.

CONFORMIDADE COM PADRÕES
Este programa deverá ser compatível com a Interface de Definição System V de FILE(CMD), tão próximo quanto possível a partir da vaga linguagem ali presente. Seu comportamento é muito compatível com o programa System V de mesmo nome. Estas versões conhecem mais números mágicos, ainda que produzam diferentes (e às vezes mais acurados) resultados em muitos casos.

A diferença significativa entre esta versão e o System V reside no fato desta tratar espaços em branco como delimitadores, então padrões separados por espaços podem não ser detectados. Por exemplo,
>10    string    language impress     (imPRESS data)
é um número mágico existente que pode ser mudado para
>10    string    language\ impress    (imPRESS data)
Adicionalmente, nesta versão, se um conjunto de caracteres padrão contém uma barra reversa, ela pode ser não detectada. Por exemplo
0    string    \begindata    Andrew Toolkit document
em um arquivo de números mágicos deve ser mudado para
0    string    \\begindata    Andrew Toolkit document

O SunOS versão 3.2 e as versões mais atuais da Sun Microsystems incluem um comando file(1) derivado do System V, mas com algumas extensões. Minha versão difere da Sun em alguns pequenos detalhes. Ele inclui a extensão do operador `&' usado como no exemplo,
>16    long&0x7fffffff    >0    not stripped

DIRETÓRIO MÁGICO
As entradas de arquivos de números mágicos foram coletadas de diversas fontes, principalmente da USENET, e através da contribuição de diversos autores. Christos Zoulas (endereçado abaixo) coletará números mágicos adicionais e uma lista consolidada será distribuída periodicamente.

A ordem de entrada no arquivo de números mágicos é significativa. Dependendo de qual sistema está sendo utilizado, uma ordem diferente pode produzir resultados errôneos. Caso um antigo comando file use um novo arquivo mágico, mantenha o arquivo anterior com propósitos de comparação (renomeie-o para algo como /usr/share/magic.orig).

HISTÓRICO
Há um comando file em cada sistema UNIX deste a última versão Research Version 6(página de manual datada de Janeiro de 1975). A versão do System V introduz uma mudança significativa: o uso de listas externas de números mágicos. Isso tornou o programa mais lento, mas tornou-o muito mais flexível.

Este programa, baseado na versão do System V, foi escrito por Ian Darwin sem procurar pelo código preexistente.

John Gilmore revisou o código longamente, tornando-o melhor que a primeira versão. Geoff Collyer encontrou diversas incorreções nas informações de alguns números mágicos. Este programa continua em evolução desde então.

AUTOR
Escrito por Ian F. Darwin, UUCP endereço {utzoo | ihnp4}!darwin!ian, Endereço Internet ian@sq.com, Endereço postal: P.O. Box 603, Station F, Toronto, Ontario, CANADA M4Y 2L8.

Alterado por Rob McMahon, cudcv@warwick.ac.uk, 1989, estendendo o uso do operador `&' do simples `x&y != 0' para `x&y op z'.

Alterado por Guy Harris, guy@netapp.com, 1993, para:

    colocado o `&' no seu velho estilo porque 1) a mudança de Rob McMahon's mudou o estilo anterior de uso e 2) o novo estilo SunOS ``new-style'' para o operador `&', cuja versão é suportada por file, manipula também `x&y op z', e 3) a mudança de Rob não estava documentada;

    colocados em múltiplo níveis de `>';

    colocadas palavras chaves como ``beshort'', ``leshort'', etc. para pesquisar números mágicos em ordens específicas de bytes ao invés da ordem nativa de execução do processo file.

Mudanças feitas por Ian Darwin e vários autores incluindo Christos Zoulas (christos@astron.com), 1990-1997.

NOTÍCIAS LEGAIS
Copyright (c) Ian F. Darwin, Toronto, Canada, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993.

Este software não está sujeito e não poderá estar sujeito a qualquer licença da American Telephone and Telegraph Company, Sun Microsystems Inc., Digital Equipment Inc., Lotus Development Inc., Regents of the University of California, The X Consortium ou MIT, ou The Free Software Foundation.

Este software não está sujeito às restrições de exportação do United States Department of Commerce, e pode ser exportado para qualquer país ou planeta.

É dada permissão a qualquer um para usar este software para qualquer propósito em sistemas de computador, para alterar e distribui-lo livremente, sujeito às seguintes restrições:

1. O autor não se responsabiliza pelas conseqüências no uso deste software, não importando quanto ele possa prejudicar a um determinado uso.

2. A origem deste software não dever ser mal representada, quer pela falta de declarações explícitas ou por omissão. Uma vez que poucos usuários lêem fontes, os créditos devem estar presentes na documentação.

3. Versões alteradas devem ser claramente definidas como tais, e não devem de forma alguma serem apresentadas como o software original. Desde que poucos usuários lêem os fontes, créditos devem estar presentes na documentação.

4. Estes avisos não podem ser removidos ou alterados.

Alguns arquivos de suporte como (getopt, strtok) distribuídos com esse pacote são de autoria de Henry Spencer e estão sujeitos aos mesmo termos acima.

Alguns poucos arquivos de suporte (strtol, strchr) distribuídos com este pacote são de domínio público; e estão representados como tal.

Os arquivos tar.h e is_tar.c foram escritos por John Gilmore a partir de seu programa de domínio público tar e outros programas aqui citado não estão cobertos pelas restrições acima.

PROBLEMAS
Deve haver uma maneira melhor de automatizar a construção de arquivos de números mágicos. Por exemplo, compilando-o como um binário (digamos ndbm(3) ou melhor ainda em arquivos ASCII de tamanhos fixos, para uso de redes heterogêneas) para um início mais rápido. O programa rodará tão rápido como na versão 7 de mesmo nome, com a flexibilidade da versão do System V.

File usa diversos algoritmos cuja velocidade contrapõem-se com a acuidade, e que podem produzir resultados diversos em arquivos ASCII.

O suporte em arquivos ASCII (principalmente em arquivos de programas) é simplista, ineficiente e requer recompilação para ser atualizado.

Deverá haver uma cláusula ``else'' para permitir linhas de continuação.

O arquivo de números mágicos devem ter suporte a expressões regulares. O uso de ASCII TAB como delimitador é ruim e torna a edição dos arquivos mais difícil.

É desejável permitir letras em maiúsculas como em comandos troff(1) vs macros de páginas de manual. Suportes a expressões regulares podem tornar isso mais fácil.

O programa não reconhece FORTRAN. Ele poderia reconhecê-lo por algumas palavras chave que aparecem indentadas no início da linha. Expressões regulares podem tornar isso mais simples.

A lista de palavras chave em ascmagic provavelmente pertencem ao arquivo Magic. Isso pode ser feito através do uso de palavras chaves como `*' no valor de deslocamento.

Outras otimizações podem ser muito úteis.

Este programa é mais lento que alguns comandos files comerciais.

Esta página de manual e especialmente esta seção é muito longa.

DISPONIBILIDADE
Pode-se obter a última versão do original do autor através de FTP anônimo em ftp.astron.com no diretório /pub/file/file-X.YY.tar.gz

TRADUÇÃO E REVISÃO PARA A LÍNGUA PORTUGUESA
Sandro Nunes Henrique <sandro@conectiva.com.br> (tradução) Rodrigo Stulzer Lopes <rodrigo@conectiva.com.br> (revisão)