web-dev-qa-db-fra.com

Quelle est la relation entre les types MIME et les extensions de fichier?

J'ai peut-être la mauvaise idée ici, mais je pensais que:

Les types MIME sont des codes d'identification, intégrés à l'intérieur un fichier.
Fichier .extensions sont des codes d'identification, suffixés du fichier nom.

Je pensais, d'après quelque chose que j'avais entendu dans les années sombres, que Linux était agnostique .extension ... (peut-être que c'était tôt, et les choses ont changé depuis ...?)

Je viens tout récemment de Windows, où, au niveau niveau du système d'exploitation, un fichier .extension est le seul moyen (à ma connaissance) de l'associer à son programme d'application correspondant.

Parce que je ne sais pas pourquoi, je trouve un peu déconcertant qu'un fichier nommé "fred" et un fichier nommé "fred.txt" s'ouvrent tous deux dans un texte Éditeur.

Y at-il une hiérarchie claire à l’œuvre ici?

19
Peter.O

Les types MIME ne sont qu'un moyen de nommer les types. Ils n'ont rien à voir avec la façon dont le type de fichier est déterminé.

Il y a deux façons de déterminer le type d'un fichier: a) Regardez son extension et espérez qu'il est exact ou b) examinez son contenu, puis devinez sur cette base. Si un fichier n'a pas d'extension, b est la seule option.

De nombreux formats de fichiers (binaires) ont un en-tête spécifique que vous pouvez consulter pour déterminer leur type. Cela rend l'option b assez fiable pour ces types.

Les formats de fichier texte brut peuvent souvent être déterminés par leur structure (si un fichier contient beaucoup de balises HTML, il s'agit probablement d'un fichier HTML).

Sur les systèmes unix et linux, vous pouvez utiliser l'utilitaire de ligne de commande file pour connaître le type d'un fichier en fonction de son contenu.

Le gestionnaire de fichiers utilise souvent une combinaison des options a et b (par exemple, examinez d'abord l'extension du fichier, si elle n'est pas connue (ou si le fichier ne possède pas d'extension), examinez le contenu).

Un type de fichier n'est pas stocké en tant que métadonnées sur les systèmes de fichiers linux courants.

15
sepp2k

Sous Linux, l’extension de fichier fait partie du nom de fichier et ne signifie en réalité rien pour le système d’exploitation. Un type MIME est une description du contenu du fichier. fred et fred.txt auraient tous deux un type MIME de text/plain.

Les gestionnaires de fichiers, tels que Nautilus, utilisent ce type MIME pour savoir avec quel programme ouvrir le fichier. Dans un terminal, la commande xdg-open fait la même chose. Cependant, il s’agit du niveau d’espace utilisateur et non du système d’exploitation.

Les fichiers ne contiennent pas réellement ce type MIME, mais les programmes qui les ouvrent utilisent diverses méthodes pour déterminer ce qu'est ce type MIME. Certains se fient uniquement à l'extension de fichier, mais la plupart utilisent un mélange de techniques, notamment l'examen des données au début du fichier.

Si le début du fichier ne contient que des octets pouvant être représentés sous la forme de caractères ASCII, il est prudent de supposer qu'il s'agit d'un fichier texte. Si l'extension correspond à quelque chose comme .html, le programme suppose qu'il s'agit d'une page HTML et l'ouvre donc avec un navigateur Web. La même chose fonctionne avec les formats de fichiers binaires. Par exemple, je sais que le format de fichier bitmap commence par "BMP" dans ASCII, suivi de données binaires représentant l'image.

En termes simples, les programmes Linux font une supposition éclairée basée sur les données d'un fichier et son extension. Cela peut sembler peu fiable, mais les algorithmes utilisés sont plus compliqués que les exemples que j’ai donnés et sont en réalité très précis.

14
dv3500ea

Dans le monde linux, les extensions de fichier ne sont qu'un indicateur du type de fichier. Il existe un outil de ligne de commande appelé "fichier" qui détermine le type d'un fichier.

Pour obtenir ce type, il y a principalement 3 indicateurs:

  • L'extension
  • Attributs spéciaux dans le système de fichiers (comme pour les liens symboliques ou durs, les dossiers, le périphérique d'entrée, etc.)
  • Le contenu
    • Binaire (comme les informations ELF dans les exécutables)
    • Textuel (comme <html>, #!/bin/bash)

La relation entre le type de fichier et le type MIME est la suivante: MIME est uniquement un standard pour représenter le type de fichier (comme text/css).

Linux "devine" le type de fichier et ouvre un programme associé à ce type.

5
Lincoln