file — determinar o tipo de arquivo
SINOPSIS
file [-bcdEhiklLNnprsSvzZ0] [--apple] [--exclude-quiet] [--extension] [--mime-encoding]
[--mime-type] [-e testname] [-F separator] [-f namefile] [-m magicfiles] [-P name=value]
file ...
file -C [-m magicfiles]
file [--help]
DESCRIÇÃO
Esta página de manual documenta a versão 5.46 do comando file.
file testa cada argumento na tentativa de classificá-lo. Existem três conjuntos de testes, executados
nesta ordem: testes do sistema de arquivos, testes de "magic" e testes de linguagem. O primeiro teste que for bem-sucedido faz com que o tipo de arquivo seja impresso.
O tipo impresso geralmente conterá uma das palavras "text" (o arquivo contém apenas caracteres de impressão e alguns caracteres de controle comuns e provavelmente é seguro para ser lido em um terminal ASCII), "executable" (o arquivo contém o resultado da compilação de um programa em um formato compreensível para algum kernel UNIX ou outro) ou "data" (significando qualquer outra coisa; data geralmente é "binária" ou não imprimível). As exceções são formatos de arquivo bem conhecidos (arquivos de núcleo, arquivos tar) que se sabe conter dados binários. Ao modificar arquivos de "magic" ou o próprio programa, certifique-se de preservar essas palavras-chave. Os usuários dependem de saber que todos os arquivos legíveis em um diretório têm a palavra "text" impressa. Não faça como a Berkeley fez e altere "comandos shell text" para "script shell".
Os testes do sistema de arquivos são baseados na análise do retorno de uma chamada de sistema stat(2). O programa verifica se o arquivo está vazio ou se é algum tipo de arquivo especial. Quaisquer tipos de arquivo conhecidos apropriados para o sistema em que você está executando (sockets, links simbólicos ou pipes nomeados (FIFOs) naqueles sistemas que os implementam) são inferidos se estiverem definidos no arquivo de cabeçalho do sistema
Os testes de "magic" são usados para verificar arquivos com dados em formatos fixos específicos. O exemplo canônico disso é um arquivo executável binário (programa compilado) a.out, cujo formato é definido em
Se um arquivo não corresponder a nenhuma das entradas no arquivo mágico, ele será examinado para verificar se parece ser um arquivo de texto. ASCII, ISO-8859-x, conjuntos de caracteres ASCII estendidos não ISO de 8 bits (como os usados em sistemas Macintosh e IBM PC), Unicode codificado em UTF-8, Unicode codificado em UTF-16 e conjuntos de caracteres EBCDIC podem ser distinguidos pelas diferentes faixas e sequências de bytes que constituem o texto imprimível em cada conjunto. Se um arquivo passar por qualquer um desses testes, seu conjunto de caracteres será relatado. Arquivos ASCII, ISO-8859-x, UTF-8 e ASCII estendidos são identificados como “texto” porque serão legíveis na maioria dos terminais; UTF-16 e EBCDIC são apenas “dados de caracteres” porque, embora contenham texto, ele exigirá tradução antes de poder ser lido.
Além disso, o comando file tentará determinar outras características de arquivos do tipo texto. Se as linhas de um arquivo forem terminadas por CR, CRLF ou NEL, em vez do LF padrão do Unix, isso será relatado. Arquivos que contêm sequências de escape ou sobrescritura embutidas também serão identificados.
Depois que o comando file determinar o conjunto de caracteres usado em um arquivo de texto, ele tentará determinar em que idioma o arquivo está escrito. Os testes de idioma procuram por strings específicas (veja <names.h>) que podem aparecer em qualquer lugar nos primeiros blocos do arquivo. Por exemplo, a palavra-chave .br indica que o arquivo provavelmente é um arquivo de entrada troff(1), assim como a palavra-chave struct indica um programa C. Esses testes são menos confiáveis do que os dois grupos anteriores, portanto, são executados por último. As rotinas de teste de idioma também testam algumas informações diversas (como arquivos tar(1)).
Qualquer arquivo que não possa ser identificado como tendo sido escrito em qualquer um dos conjuntos de caracteres listados acima é simplesmente classificado como “dados”.
OPÇÕES
^ -apple
Faz com que o comando file imprima o tipo de arquivo e o código do criador, conforme usado pelas versões mais antigas do MacOS. O código consiste em oito letras, a primeira descrevendo o tipo de arquivo e a última, o criador. Esta opção funciona corretamente apenas para formatos de arquivo que têm a saída no estilo Apple definida.
^ b, --brief
Não prefixe os nomes dos arquivos nas linhas de saída (modo conciso).
^ C, --compile
Gere um arquivo de saída magic.mgc que contém uma versão pré-analisada do arquivo mágico ou diretório.
^ c, --checking-printout
Cause uma impressão de verificação da forma analisada do arquivo mágico. Isso geralmente é usado em conjunto com a opção -m para depurar um novo arquivo mágico antes de instalá-lo.
^ d
Imprime informações de depuração internas no stderr.
^ E
Em caso de erros do sistema de arquivos (arquivo não encontrado, etc.), em vez de tratar o erro como saída normal, conforme exige o POSIX, emita uma mensagem de erro e saia.
-e, --exclude testname
Exclui o teste especificado em testname da lista de testes usados para determinar o tipo de arquivo. Os nomes de teste válidos são:
apptype Tipo de aplicativo EMX (apenas no EMX).
ascii Vários tipos de arquivos de texto (este teste tentará adivinhar a codificação do texto, independentemente da configuração da opção 'encoding').
encoding Diferentes codificações de texto para testes de "soft magic".
tokens Ignorado para compatibilidade com versões anteriores.
cdf Imprime detalhes de arquivos de Documento Composto.
compress Verifica e analisa arquivos compactados.
csv Verifica arquivos CSV (Comma Separated Value).
elf Imprime detalhes de arquivos ELF, desde que os testes de "soft magic" estejam habilitados e o "magic" seja encontrado.
json Examina arquivos JSON (RFC-7159) analisando-os para verificar a conformidade.
soft Consulta arquivos "magic".
simh Examina arquivos SIMH.
tar Examina arquivos tar verificando o checksum do cabeçalho tar de 512 bytes. Excluir este teste pode fornecer uma descrição de conteúdo mais detalhada usando o método "soft magic".
text Um sinônimo para 'ascii'.
--exclude-quiet
Semelhante a --exclude, mas ignora testes que o arquivo não conhece. Destinado à compatibilidade com versões mais antigas do comando file.
--extension
Imprime uma lista separada por barras de extensões válidas para o tipo de arquivo encontrado.
-F, --separator separator
Usa a string especificada como separador entre o nome do arquivo e o resultado do arquivo retornado. O padrão é ':'.
-f, --files-from namefile
Lê os nomes dos arquivos a serem examinados de namefile (um por linha) antes da lista de argumentos. Ou namefile ou pelo menos um argumento de nome de arquivo devem estar presentes; para testar a entrada padrão, use '-' como um argumento de nome de arquivo. Observe que namefile é descompactado e os nomes de arquivos incluídos são processados quando esta opção é encontrada e antes que qualquer processamento adicional de opções seja feito. Isso permite processar várias listas de arquivos com diferentes argumentos de linha de comando na mesma invocação do comando file. Assim, se você quiser definir o delimitador, você precisa fazê-lo antes de especificar a lista de arquivos, como: "-F @ -f namefile", em vez de: "-f namefile -F @".
-h, --no-dereference
Esta opção faz com que os links simbólicos não sejam seguidos (em sistemas que suportam links simbólicos). Este é o padrão se a variável de ambiente POSIXLY_CORRECT não estiver definida.
-i, --mime
Faz com que o comando file produza strings de tipo MIME em vez das strings mais tradicionais legíveis por humanos. Assim, pode exibir 'text/plain; charset=us-ascii' em vez de "texto ASCII".
--mime-type, --mime-encoding
Semelhante a -i, mas imprime apenas o(s) elemento(s) especificado(s).
-k, --keep-going
Não pare no primeiro resultado, continue. Os resultados subsequentes terão a string '\012- ' prefixada. (Se você quiser uma nova linha, veja a opção -r.) O padrão "magic" com a força mais alta (veja a opção -l) vem primeiro.
-l, --list
Exibe uma lista de padrões e seus níveis de força, ordenada de forma decrescente pelo nível de "magia" (magic), que é usado para a correspondência (veja também a opção -k).
-L, --dereference
Essa opção faz com que os links simbólicos sejam seguidos, como a opção com o mesmo nome em [ls]({filename}../../ls)(1) (em sistemas que suportam links simbólicos). Essa é a opção padrão se a variável de ambiente POSIXLY_CORRECT estiver definida.
-m, --magic-file magicfiles
Especifica uma lista alternativa de arquivos e diretórios que contêm os dados "mágicos". Pode ser um único item ou uma lista separada por dois pontos. Se um arquivo "mágico" compilado for encontrado junto com um arquivo ou diretório, ele será usado.
-N, --no-pad
Não preenche os nomes dos arquivos para que eles se alinhem na saída.
-n, --no-buffer
Força a saída padrão (stdout) a ser liberada após verificar cada arquivo. Isso só é útil ao verificar uma lista de arquivos. É destinado a ser usado por programas que desejam obter a saída do tipo de arquivo de um pipe.
-p, --preserve-date
Em sistemas que suportam utime(3) ou utimes(2), tenta preservar o tempo de acesso dos arquivos analisados, para simular que eles nunca foram lidos.
-P, --parameter name=value
Define vários limites de parâmetros.
Name Default Explanation
bytes 1M número máximo de bytes a serem lidos do arquivo
elf_notes 256 número máximo de notas ELF processadas
elf_phnum 2K número máximo de seções de programa ELF processadas
elf_shnum 32K número máximo de seções ELF processadas
elf_shsize 128MB tamanho máximo da seção ELF processada
encoding 65K número máximo de bytes para determinar a codificação
indir 50 limite de recursão para "magia" indireta
name 100 limite de contagem para "magia" de nome/uso
regex 8K limite de comprimento para pesquisas de expressão regular
-r, --raw
Não traduz caracteres não imprimíveis para \ooo. Normalmente, o comando file traduz caracteres não imprimíveis para sua representação octal.
-s, --special-files
Normalmente, o comando file tenta apenas ler e determinar o tipo de arquivos de argumento que [stat]({filename}../../stat)(2) relata serem arquivos comuns. Isso evita problemas, porque a leitura de arquivos especiais pode ter consequências incomuns. Especificar a opção -s faz com que o comando file também leia arquivos de argumento que são arquivos especiais de bloco ou de caractere. Isso é útil para determinar os tipos de sistema de arquivos dos dados em partições de disco brutas, que são arquivos especiais de bloco. Esta opção também faz com que o comando file ignore o tamanho do arquivo, conforme relatado por [stat]({filename}../../stat)(2), pois em alguns sistemas ele relata um tamanho zero para partições de disco brutas.
-S, --no-sandbox
Em sistemas onde a libseccomp (https://github.com/seccomp/libseccomp) está disponível, a opção -S desativa o "sandbox" que é habilitado por padrão. Essa opção é necessária para que o comando file execute programas de descompressão externos, ou seja, quando a opção -z é especificada e os descompactadores internos não estão disponíveis. Em sistemas onde o "sandbox" não está disponível, esta opção não tem efeito.
Observação: Esta versão Debian do arquivo foi compilada sem suporte a seccomp, portanto, esta opção
não tem efeito.
-v, --version
Imprime a versão do programa e sai.
-z, --uncompress
Tenta analisar arquivos compactados.
-Z, --uncompress-noreport
Tenta analisar arquivos compactados, mas relata informações sobre o conteúdo, não
a compactação.
-0, --print0
Imprime um caractere nulo ‘\0’ após o final do nome do arquivo. Útil para [cut]({filename}../../cut)(1) a saída.
Isso não afeta o separador, que ainda é impresso.
Se esta opção for repetida mais de uma vez, o comando file imprime apenas o nome do arquivo seguido por
um NUL seguido pela descrição (ou ERROR: texto) seguido por um segundo NUL para cada entrada.
--help Imprime uma mensagem de ajuda e sai.
AMBIENTE
A variável de ambiente MAGIC pode ser usada para definir o nome padrão do arquivo magic. Se essa variável
for definida, o comando file não tentará abrir $HOME/.magic. O comando file adiciona “.mgc” ao valor desta
variável, conforme apropriado. A variável de ambiente POSIXLY_CORRECT controla (em sistemas que suportam links simbólicos) se o comando file tentará seguir links simbólicos ou não. Se estiver definida, o comando file
segue o link simbólico; caso contrário, não o segue. Isso também é controlado pelas opções -L e -h.
ARQUIVOS
/usr/share/misc/magic.mgc Lista compilada padrão de magic.
/usr/share/misc/magic Diretório que contém os arquivos magic padrão.
STATUS DE SAÍDA
O comando file sairá com 0 se a operação for bem-sucedida ou >0 se ocorrer um erro. Os
seguintes erros causam mensagens de diagnóstico, mas não afetam o código de saída do programa (conforme exige o POSIX), a menos que -E seja especificado:
Um arquivo não pode ser encontrado
Não há permissão para ler um arquivo
O tipo de arquivo não pode ser determinado
EXEMPLOS
$ file file.c file /dev/{wd0a,hda}
file.c: Texto do programa C
file: Executável ELF de 32 bits LSB, Intel 80386, versão 1 (SYSV),
dinamicamente vinculado (usa bibliotecas compartilhadas), removido
/dev/wd0a: bloco especial (0/0)
/dev/hda: bloco especial (3/0)
$ file -s /dev/wd0{b,d}
/dev/wd0b: dados
/dev/wd0d: setor de inicialização x86
$ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
/dev/hda: Setor de inicialização x86
/dev/hda1: Sistema de arquivos Linux/i386 ext2
/dev/hda2: Setor de inicialização x86
/dev/hda3: Setor de inicialização x86, tabela de partição estendida
/dev/hda4: Sistema de arquivos Linux/i386 ext2
/dev/hda5: Arquivo de swap Linux/i386
/dev/hda6: Arquivo de swap Linux/i386
/dev/hda7: Arquivo de swap Linux/i386
/dev/hda8: Arquivo de swap Linux/i386
/dev/hda9: vazio
/dev/hda10: vazio
$ file -i file.c file /dev/{wd0a,hda}
file.c: text/x-c
file: application/x-executable
/dev/hda: application/x-not-regular-file
/dev/wd0a: application/x-not-regular-file
CONSULTE TAMBÉM
hexdump(1), [od]({filename}../../od)(1), strings(1), magic(5)
CONFORMIDADE COM OS PADRÕES
Acredita-se que este programa exceda a Definição da Interface do Sistema V de FILE(CMD), tanto quanto se pode determinar a partir da linguagem vaga contida nele. O seu comportamento é amplamente compatível com
o programa do Sistema V com o mesmo nome. Esta versão conhece mais magic, no entanto, portanto, produzirá uma saída diferente (embora mais precisa) em muitos casos.
A principal diferença entre esta versão e o System V é que esta versão trata qualquer espaço em branco como um delimitador, de modo que os espaços em strings de padrão devem ser escapados. Por exemplo:
>10 string language impress (imPRESS data)
em um arquivo mágico existente, teria que ser alterado para:
>10 string language\ impress (imPRESS data)
Além disso, nesta versão, se uma string de padrão contiver uma barra invertida, ela deve ser escapada. Por exemplo:
0 string \begindata Andrew Toolkit document
em um arquivo mágico existente, teria que ser alterado para:
0 string \\begindata Andrew Toolkit document
As versões 3.2 e posteriores do SunOS, da Sun Microsystems, incluem um comando file derivado do System V, mas com algumas extensões. Esta versão difere da versão da Sun apenas em aspectos menores. Ele inclui a extensão do operador '&', usado como, por exemplo:
>16 long&0x7fffffff >0 not stripped
SEGURANÇA
Em sistemas onde o libseccomp (https://github.com/seccomp/libseccomp) está disponível, o comando file aplica restrições, limitando as chamadas de sistema apenas às necessárias para a operação do programa. Essa aplicação não oferece nenhum benefício de segurança quando o comando file é solicitado a descompactar arquivos de entrada executando programas externos com a opção -z. Para habilitar a execução de descompactadores externos, é necessário desabilitar o sandbox usando a opção -S.
DIRETÓRIO MÁGICO
As entradas do arquivo mágico foram coletadas de várias fontes, principalmente do USENET, e contribuídas por vários autores. Christos Zoulas (endereço abaixo) coletará entradas adicionais ou corrigidas do arquivo mágico. Uma consolidação das entradas do arquivo mágico será distribuída periodicamente.
A ordem das entradas no arquivo mágico é significativa. Dependendo do sistema que você está usando, a ordem em que elas são colocadas pode estar incorreta.
HISTÓRIA
Houve um comando file em todos os UNIX desde pelo menos a Research Version 4 (página de manual datada de novembro de 1973). A versão do System V introduziu uma mudança importante: a lista externa de tipos mágicos. Isso diminuiu ligeiramente a velocidade do programa, mas o tornou muito mais flexível.
Este programa, baseado na versão do System V, foi escrito por Ian Darwin ⟨_\⟩ sem consultar o código-fonte de outras pessoas.
John Gilmore revisou o código extensivamente, tornando-o melhor do que a primeira versão. Geoff Collyer encontrou várias inadequações e forneceu algumas entradas do arquivo mágico. Contribuições do operador '&' por Rob McMahon, ⟨_\⟩, 1989.
Guy Harris, ⟨_\⟩, fez muitas alterações de 1993 até o presente.
Desenvolvimento e manutenção primários de 1990 até o presente por Christos Zoulas ⟨_\⟩.
Alterado por Chris Lowth ⟨_\⟩, 2000: tratamento da opção -i para saída de strings de tipo MIME, usando um arquivo mágico alternativo e lógica interna.
Alterado por Eric Fischer ⟨_\⟩, julho de 2000, para identificar códigos de caracteres e tentar identificar os idiomas de arquivos não-ASCII.
Alterado por Reuben Thomas ⟨_\⟩, 2007-2011, para melhorar o suporte MIME, mesclar MIME e mágica não-MIME, dar suporte a diretórios, bem como a arquivos de mágica, aplicar muitas correções de bugs, atualizar e corrigir muitas máginas, melhorar o sistema de construção, melhorar a documentação e reescrever as vinculações Python em Python puro.
A lista de colaboradores para o diretório ‘magic’ (arquivos de mágica) é muito longa para ser incluída aqui. Vocês sabem quem são; obrigado. Muitos colaboradores estão listados nos arquivos de origem.
AVISO LEGAL
Copyright (c) Ian F. Darwin, Toronto, Canadá, 1986-1999. Coberto pelo copyright padrão da Distribuição de Software Berkeley; consulte o arquivo COPYING na distribuição de origem.
Os arquivos tar.h e is_tar.c foram escritos por John Gilmore a partir de seu programa tar(1) de domínio público, e não são cobertos pela licença acima.
BUGS
Por favor, relate bugs e envie patches para o rastreador de bugs em https://bugs.astron.com/ ou para a lista de discussão em ⟨_\⟩ (visite https://mailman.astron.com/mailman/listinfo/file primeiro para se inscrever).
A FAZER
Corrigir a saída para que os testes para as flags MIME e APPLE não sejam necessários em todos os lugares e a saída real seja feita apenas em um lugar. Isso precisa de um design. Sugestão: colocar possíveis saídas em uma lista e, em seguida, selecionar o último valor inserido (o mais específico, espera-se) no final ou usar um valor padrão se a lista estiver vazia. Isso não deve diminuir a velocidade da avaliação.
O tratamento de MAGIC_CONTINUE e a impressão de \012- entre as entradas são complicados; refatorar e centralizar.
Alguma da lógica de codificação está codificada em encoding.c e pode ser movida para os arquivos de mágica se tivéssemos uma anotação !:charset.
Continuar a corrigir todos os bugs de mágica. Consulte o Debian BTS para obter uma boa fonte.
Armazenar strings de comprimento arbitrário, por exemplo, para padrões %s, para que possam ser impressas. Corrige o bug 271672 do Debian. Isso pode ser feito alocando strings em um pool de strings, armazenando o pool de strings no final do arquivo de mágica e convertendo todos os ponteiros de string em deslocamentos relativos do pool de strings.
Adicionar sintaxe para deslocamentos relativos após o nível atual (bug 466037 do Debian).
Fazer com que o comando file -ki funcione, ou seja, fornecer vários tipos MIME.
Adicionar uma biblioteca zip para que possamos espiar dentro dos documentos Office2007 para imprimir mais detalhes sobre o conteúdo deles.
Adicionar uma opção para imprimir URLs para as fontes das descrições dos arquivos.
Combinar pesquisas de script e adicionar uma maneira de mapear nomes de executáveis para tipos MIME (por exemplo, ter um valor de mágica para !:mime que faça com que a string resultante seja procurada em uma tabela). Isso evitaria adicionar a mesma mágica repetidamente para cada novo interpretador hash-bang.
Quando um descritor de arquivo estiver disponível, podemos pular e ajustar o buffer em vez do gerenciamento de buffer complicado que fazemos agora.
Corrigir "name" e "use" para verificar a consistência em tempo de compilação (duplicação de "name", "use" apontando para um "name" não definido). Tornar "name" / "use" mais eficientes mantendo uma lista ordenada de nomes. Criar um caso especial para ^, invertendo a ordem dos bytes no analisador, para que não precise ser escapado, e documentar isso.
Se os deslocamentos especificados internamente no arquivo excederem o tamanho do buffer (variável HOWMANY no arquivo file.h), não fazemos a busca para esse deslocamento, mas desistimos. Seria melhor se o gerenciamento do buffer fosse feito quando o descritor de arquivo estiver disponível, para que possamos buscar em torno do arquivo. Deve-se ter cuidado, no entanto, porque isso tem implicações de desempenho e, portanto, de segurança, pois pode-se diminuir a velocidade das coisas fazendo buscas repetidas.
Há suporte agora para manter buffers separados e ter deslocamentos a partir do final do arquivo, mas o gerenciamento interno do buffer ainda precisa de uma revisão.
DISPONIBILIDADE
Você pode obter a versão mais recente do autor original por meio de FTP anônimo em ftp.astron.com no diretório /pub/file/file-X.YZ.tar.gz.