Qual é o relacionamento entre tipos MIME e File .extensions?

13

Eu posso ter a ideia errada aqui, mas pensei que:

Tipos MIME são códigos de identificação, incorporados dentro de um arquivo.
Arquivo .extensions são códigos de idenificação, com sufixos ao arquivo < strong> nome .

Eu pensava, em algo que eu ouvi na obscura idade das trevas, que o Linux era .extensão agnóstica ... (talvez fosse nos primeiros dias, e as coisas mudaram desde então ...?)

Eu vim recentemente do mundo do Windows, onde, no nível do sistema operacional , um arquivo .extension é a única maneira (até onde eu sei) de associá-lo a seus relevantes Programa de aplicação.

Como não sei por que , acho um pouco desconcertante que um arquivo chamado "fred" e um arquivo chamado "fred.txt" seja aberto em um editor de texto.

Existe uma hierarquia clara em ação aqui?

    
por Peter.O 15.10.2010 / 16:11

3 respostas

12

Os tipos MIME são apenas uma maneira de nomear tipos. Eles não têm nada a ver com o tipo de arquivo determinado.

Existem duas maneiras de determinar o tipo de um arquivo: a) Observe sua extensão e espere que ela seja precisa ou b) observe seu conteúdo e, em seguida, especifique com base nisso. Se um arquivo não tiver extensão, b é a única opção.

Muitos formatos de arquivo (binários) têm um cabeçalho específico que você pode examinar para determinar seu tipo. Isso torna a opção b bastante confiável para esses tipos.

Formatos de arquivos de texto simples podem ser determinados por sua estrutura (se um arquivo contiver muitas tags html, provavelmente é um arquivo html).

Em sistemas unix e linux você pode usar o utilitário de linha de comando file para descobrir o tipo de arquivo baseado em seu conteúdo.

O gerenciador de arquivos geralmente usa alguma combinação das opções aeb (por exemplo, observe a extensão do arquivo primeiro, se não for conhecida (ou o arquivo não tiver uma extensão), examine o conteúdo).

O tipo de um arquivo não é armazenado como metadados em sistemas de arquivos linux comuns.

    
por sepp2k 15.10.2010 / 16:37
12

No Linux, a extensão do arquivo é parte do nome do arquivo e não significa nada para o sistema operacional. Um tipo MIME é uma descrição do conteúdo do arquivo. fred e fred.txt teriam um tipo MIME de text/plain .

Gerentes de arquivos, como o Nautilus, usam esse tipo MIME para saber com qual programa abrir o arquivo. Em um terminal, o comando xdg-open faz a mesma coisa. No entanto, este é o nível de espaço do usuário e não o nível do sistema operacional.

Os arquivos não contêm este tipo MIME, mas os programas que os abrem usam vários métodos para descobrir o que é esse tipo MIME. Alguns dependem apenas da extensão de arquivo, mas a maioria usa uma mistura de técnicas, incluindo a observação dos dados no início do arquivo.

Se o início do arquivo contiver apenas bytes que podem ser representados como caracteres ASCII, é seguro assumir que é um arquivo de texto. Se a extensão for algo como .html, o programa assume que é uma página HTML e, portanto, abre com um navegador da web. A mesma coisa funciona com formatos de arquivos binários. Por exemplo, sei que o formato do arquivo de bitmap começa com 'BMP' em ASCII, seguido por dados binários que representam a imagem.

Simplificando, os programas Linux fazem uma estimativa baseada nos dados de um arquivo e em sua extensão de arquivo. Isso pode não parecer muito confiável, mas os algoritmos usados são mais complicados do que os exemplos que eu dei e são realmente precisos.

    
por dv3500ea 15.10.2010 / 16:34
3

No mundo linux As extensões de arquivo são apenas um indicador para o tipo de arquivo. Existe uma ferramenta de linha de comando chamada "file" que adivinha o tipo de arquivo.

Para obter este tipo, existem principalmente 3 indicadores:

  • A extensão
  • Atributos especiais no sistema de arquivos (como para sym- ou hardlinks, pastas, dispositivo de entrada, etc.)
  • O conteúdo
    • Binário (como informações ELF em executáveis)
    • Textual (como <html> , #!/bin/bash )

A relação entre o tipo de arquivo e o tipo MIME é que MIME é apenas um padrão para representar o tipo de arquivo (como text/css ).

O Linux "adivinha" o tipo de arquivo e abre um programa associado para esse tipo.

    
por Lincoln 15.10.2010 / 16:34