arquivo (comando) - file (command)

Arquivo
Desenvolvedor (s) AT&T Bell Laboratories
lançamento inicial 1973 como parte do Unix Research Versão 4 ; Reimplementação de código aberto de 1986 ( 1973 ) ( 1986 )
Repositório github .com / arquivo / arquivo
Escrito em C
Sistema operacional Unix , semelhante ao Unix , Plan 9 , IBM i
Plataforma Plataforma cruzada
Modelo Detector de tipo de arquivo
Licença Licença BSD , CDDL
Local na rede Internet darwinsys .com / file /

O comando é um padrão programa de Unix e Unix-like sistemas operacionais para reconhecer o tipo de dados contidos em um arquivo de computador . file

História

A versão original fileoriginou em Unix Research Versão 4 em 1973. System V trouxe uma grande atualização com várias mudanças importantes, principalmente se movendo as informações de tipo de arquivo em um arquivo de texto externo em vez de compilá-lo no próprio binário.

A maioria das grandes BSD e Linux distribuições usar um livre , open-source reimplementação que foi escrito em 1986-87 por Ian Darwin a partir do zero. Foi expandido por Geoff Collyer em 1989 e, desde então, recebeu contribuições de muitos outros, incluindo Guy Harris, Chris Lowth e Eric Fischer; a partir do final de 1993 sua manutenção foi organizada por Christos Zoulas . O sistema OpenBSD tem sua própria implementação de subconjunto escrita do zero, mas ainda usa a coleção Darwin / Zoulas de informações formatadas de arquivos mágicos.

O filecomando também foi transferido para o sistema operacional IBM i .

Especificação

A Single Unix Specification (SUS) especifica que uma série de testes são realizados no arquivo especificado na linha de comando:

  1. se o arquivo não puder ser lido ou seu tipo de arquivo Unix for indeterminado, o fileprograma indicará que o arquivo foi processado, mas seu tipo era indeterminado.
  2. filedeve ser capaz de determinar o diretório de tipos , FIFO , socket , arquivo especial de bloco e arquivo especial de caractere
  3. arquivos de comprimento zero são identificados como tais
  4. uma parte inicial do arquivo é considerada e fileé para usar testes sensíveis à posição
  5. todo o arquivo é considerado e filedeve usar testes sensíveis ao contexto
  6. o arquivo é identificado como um dataarquivo

fileOs testes de sensibilidade à posição de são normalmente implementados comparando vários locais dentro do arquivo com um banco de dados textual de números mágicos (veja a seção Uso). Isso difere de outros métodos mais simples, como extensões de arquivo e esquemas como MIME .

Na maioria das implementações, o filecomando usa um banco de dados para conduzir a sondagem dos bytes iniciais. Esse banco de dados é implementado em um arquivo chamado magic, cuja localização é geralmente em /etc/magic, /usr/share/file/magicou um local semelhante.

Uso

O SUS exige as seguintes opções:

-M file, especifique um arquivo especialmente formatado contendo testes sensíveis à posição; testes sensíveis à posição padrão e testes sensíveis ao contexto não serão executados.
-m file, como para -M, mas os testes padrão serão executados após os testes contidos em file.
-d, realizar testes padrão sensíveis à posição e ao contexto para o arquivo fornecido; este é o comportamento padrão, a menos que -Mou -mseja especificado.
-h, não cancele a referência de links simbólicos que apontam para um arquivo ou diretório existente.
-L, cancele a referência do link simbólico que aponta para um arquivo ou diretório existente.
-i, não classifique o arquivo além de identificá-lo como: não existente, um arquivo especial de bloco, um arquivo especial de caractere, um diretório, um FIFO , um soquete, um link simbólico ou um arquivo regular. Os sistemas Linux e BSD se comportam de maneira diferente com esta opção e, em vez disso, geram um tipo de mídia da Internet (" tipo MIME ") identificando o formato de arquivo reconhecido.

Outros sistemas operacionais Unix e semelhantes a Unix podem adicionar opções extras, como -s'arquivos especiais', -k'continuar' ou -r'brutos' (exemplos abaixo).

O comando informa apenas a aparência do arquivo , não o que é (no caso em que o arquivo olha para o conteúdo). É fácil enganar o programa colocando um número mágico em um arquivo cujo conteúdo não corresponde a ele. Portanto, o comando não pode ser usado como ferramenta de segurança a não ser em situações específicas.

Exemplos

$ file file.c
file.c: C program text
$ file program
program: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked
    (uses shared libs), stripped
$ file /dev/hda1
/dev/hda1: block special (0/0)
$ file -s /dev/hda1
/dev/hda1: Linux/i386 ext2 filesystem

Observe que -s é uma opção não padrão disponível apenas em algumas plataformas, que informa filepara ler arquivos de dispositivo e tentar identificar seu conteúdo, em vez de apenas identificá-los como arquivos de dispositivo. Normalmente file, não tenta ler os arquivos do dispositivo, pois a leitura desse arquivo pode ter efeitos colaterais indesejáveis.

$ file -k -r libmagic-dev_5.35-4_armhf.deb    # (on Linux)
libmagic-dev_5.35-4_armhf.deb: Debian binary package (format 2.0)
- current ar archive
- data

Por meio da opção fora do padrão, -ko programa não para após o primeiro acerto encontrado, mas procura outros padrões correspondentes. A -ropção, que está disponível em algumas versões, faz com que o caractere de nova linha não imprimível seja exibido em sua forma bruta em vez de em sua representação octal.

$ file compressed.gz
compressed.gz: gzip compressed data, deflated, original filename, `compressed', last
    modified: Thu Jan 26 14:08:23 2006, os: Unix
$ file -i compressed.gz    # (on Linux)
compressed.gz: application/x-gzip; charset=binary
$ file data.ppm
data.ppm: Netpbm PPM "rawbits" image data
$ file /bin/cat
/bin/cat: Mach-O universal binary with 2 architectures
/bin/cat (for architecture ppc7400):	Mach-O executable ppc
/bin/cat (for architecture i386):	Mach-O executable i386
$ file /usr/bin/vi
/usr/bin/vi: symbolic link to vim

A identificação de links simbólicos não está disponível em todas as plataformas e será desreferenciada se -Lfor aprovada ou POSIXLY_CORRECTdefinida.

Biblioteca Libmagic

A partir da versão 4.00 da versão de Ian Darwin / Christos Zoulas de file, a funcionalidade do fileé incorporada a uma libmagic biblioteca que é acessível por meio de vinculação C (e compatível com C); fileé implementado usando essa biblioteca.

Referências

links externos

Páginas do manual

De outros