arquivo (comando) - file (command)
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 |
Repositório | github |
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 |
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 file
originou 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 file
comando 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:
- se o arquivo não puder ser lido ou seu tipo de arquivo Unix for indeterminado, o
file
programa indicará que o arquivo foi processado, mas seu tipo era indeterminado. -
file
deve ser capaz de determinar o diretório de tipos , FIFO , socket , arquivo especial de bloco e arquivo especial de caractere - arquivos de comprimento zero são identificados como tais
- uma parte inicial do arquivo é considerada e
file
é para usar testes sensíveis à posição - todo o arquivo é considerado e
file
deve usar testes sensíveis ao contexto - o arquivo é identificado como um
data
arquivo
file
Os 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 file
comando 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/magic
ou 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 file
para 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
- The Single UNIX Specification , Issue 7 from The Open Group : determine o tipo de arquivo - Commands & Utilities Reference,
- lista de discussão de arquivos
- lançamentos de arquivo
Páginas do manual
- Plano 9 , Volume 1 - Manual do programador do
- Linux Comandos do usuário manual -
- Manual de funções da biblioteca NetBSD -
- Manual de funções da biblioteca Linux -
- Manual de Comandos Gerais do OpenBSD -
De outros
-
Fine Free File Command - homepage para a versão
file
usada nas principais distribuições BSD e Linux. -
Arquivo para Windows - página da Web da porta nativa do GnuWin32
file
para Windows de 32 bits. - O pacote libmagic-dev em packages.debian.org
- TrID , uma alternativa que fornece respostas classificadas (em vez de apenas uma) com base em estatísticas.