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

19

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

Les types MIME sont des codes d'identification, intégrés dans un fichier.
.Extensions de fichiers sont des codes idenifying, suffixed du fichier nom .

Je pensais, à partir de quelque chose que j'ai entendu dans les âges sombres et sombres, que Linux était agnostique .extension ... (peut-être que c'était au début, et les choses ont changé depuis lors ...?)

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

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 éditeur de texte.

Y a-t-il une hiérarchie claire à l'œuvre ici?

Peter.O
la source

Réponses:

16

Les types MIME ne sont qu'un moyen de nommer les types. Ils n'ont rien à voir avec la façon dont le type d'un 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 précis ou b) regardez son contenu et devinez ensuite en fonction de cela. 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 fichiers en texte brut peuvent souvent être déterminés par leur structure (si un fichier contient beaucoup de balises html, c'est probablement un fichier html).

Sur les systèmes unix et linux, vous pouvez utiliser l' fileutilitaire de ligne de commande 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, regardez d'abord l'extension du fichier, si elle n'est pas connue (ou si le fichier n'a pas d'extension), regardez le contenu).

Le type d'un fichier n'est pas stocké en tant que métadonnées sur les systèmes de fichiers Linux courants.

sepp2k
la source
14

Sous Linux, l'extension de fichier fait partie du nom de fichier et ne signifie rien pour le système d'exploitation. Un type MIME est une description du contenu du fichier. fredet fred.txtaurait 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 xdg-opencommande fait la même chose. Cependant, il s'agit du niveau de l'espace utilisateur et non du niveau du système d'exploitation.

Les fichiers ne contiennent pas réellement ce type MIME, mais les programmes qui les ouvrent utilisent différentes méthodes pour déterminer ce qu'est ce type MIME. Certains s'appuient uniquement sur l'extension de fichier, mais la plupart utilisent un mélange de techniques, notamment en examinant les données au début du fichier.

Si le début du fichier contient uniquement des octets pouvant être représentés sous forme de caractères ASCII, il est sûr de supposer qu'il s'agit d'un fichier texte. Si l'extension est 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» en 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 de fichier. Cela peut ne pas sembler très fiable, mais les algorithmes utilisés sont plus compliqués que les exemples que j'ai donnés et sont réellement très précis.

dv3500ea
la source
5

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

Pour obtenir ce type, il existe 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 que MIME n'est qu'un standard pour représenter le type d'un fichier (comme text/css).

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

Lincoln
la source