Forum Linux.général Type mime : comment fait linux ?

Posté par  (site web personnel) .
Étiquettes : aucune
0
2
juin
2005
Bonjour,

Je crois savoir que, contrairement à Windows, Linux utilise le type MIME des fichiers pour les associer à une application. En pratique, effectivement, les extensions sont inutiles.

Mais où se cache donc cette information sur le disque ? Comment linux sait-il quel est le type MIME d'un fichier ?

Merci de vos lumières
  • # Commentaire supprimé

    Posté par  . Évalué à 6.

    Ce commentaire a été supprimé par l’équipe de modération.

    • [^] # Re: Type mime : comment fait linux ?

      Posté par  (site web personnel) . Évalué à 2.

      Cela signifie donc que si deux types de fichiers avait le malheur de commencer de la même façon, il serait impossible de les reconnaitre ?

      Du coup, je comprend mieux pourquoi on écrit #!/bin/sh au début des cripts shell.
      • [^] # Re: Type mime : comment fait linux ?

        Posté par  . Évalué à 4.

        Ben déjà

        1) " #! " au début d'un fichier est pour autant que je sache un magic number reconnu par le système qui lui permettra de choisir l'interpréteur qu'il faut lancer. Donc tu peux mettre absolument n'importe quel nom de programme en lieu et place de /bin/bash !

        2) Il y a belle lurette que Windows fonctionne déjà de la même façon. Ce fût d'ailleurs un problème car des petits malins s'amusaient à renommer des *.exe en *.gif, etc. Si bien que là où l'utilisateur avait l'impression de visualiser une image, et où les filtres de première ligne n'avaient aucun effet, celui-ci lançait un exécutable, en général malicieux.

        3) Il est quand même heureux que le système soit capable de reconnaître lui-même le genre de fichier et n'ait pas à se fier à un code en trois lettres, d'abord pour éviter ce qui vient d'être dit en 2), et ensuite parce que les combinaisons d'un code à trois lettres sont limitées.

        4) Si deux fichiers sont strictement identiques, c'est par définition parce qu'ils ont le même contenu ! Donc il n'y a à priori aucune raison valable de leur donner deux extensions différentes. Maintenant si tu estimes que des fichiers de conf (ou des saloperies style *.inf à la windows) ont besoin de cela pour être activés/désactivés, ou pour les distinguer d'un simple fichier texte que l'on ouvrirait avec un bloc-notes, et bien rien ne t'empêche de mettre quand même des extensions. Mieux, tu peux mettre autant de points que tu le souhaites (le point est considéré comme un caractère normal par le système de fichier), et file est suffisament fûté pour savoir les gérer aussi.

        Réjouis-toi : Tu peux ajouter tes propres magic numbers :

        man file
        man 5 magic
        • [^] # Re: Type mime : comment fait linux ?

          Posté par  (site web personnel) . Évalué à 2.

          2) Il y a belle lurette que Windows fonctionne déjà de la même façon.

          Non. Je viens de vérifier, Windows XP pro utilise toujours l'extension des fichiers pour les reconnaître. Il prévient d'ailleurs du risque de problème lorsque l'on essai de changer l'extension. Par contre, il cache les extensions des fichiers qu'il reconnaît, ce qui permet , avec deux extensions successives, de faire passer un ".pdf.exe" pour un ".pdf", par exemple (de façon générale, il est préférable de décocher l'option de masquage des extensions dans les paramètres windows).

          4) Si deux fichiers sont strictement identiques,

          Si j'ai bien compris, la détection du type MIME ne se fait que sur les premiers octets. Si donc, par exemple, les fichiers "sxw" et "pdf" commençaient de la même façon, linux ne saurait pas quelles application lancer, non ?
          • [^] # Re: Type mime : comment fait linux ?

            Posté par  . Évalué à 3.

            Si j'ai bien compris, la détection du type MIME ne se fait que sur les premiers octets. Si donc, par exemple, les fichiers "sxw" et "pdf" commençaient de la même façon, linux ne saurait pas quelles application lancer, non ?

            C'est la détection du type du fichier lui-même qui se fait. Sa classification dans une catégorie MIME se fait à postériori.

            Ensuite, la reconnaissance se fait le plus souvent à l'aide des premiers octets des fichiers, car la plupart des formats proposent un header à cet effet (même les *.exe de 1980 commencent par "MZ"), mais ce n'est pas systématique. file peut utiliser toutes les méthodes qu'il veut pour identifier un fichier.

            Relis notament la man-page de /etc/magic donnée plus haut. On peut y lire :

            offset : A number specifying the offset, in bytes, into the file of the data which is to be tested.
      • [^] # Re: Type mime : comment fait linux ?

        Posté par  (site web personnel) . Évalué à 3.

        Du coup, je comprend mieux pourquoi on écrit #!/bin/sh au début des cripts shell.

        En fait, le "#! un truc" placé au début d'un script est interprété par le noyau (cf http://lxr.linux.no/source/fs/binfmt_script.c#L26(...) ) pour lancer l'interpréteur idoine. Alors oui on peut effectivement s'en servir pour identifier le type du script.
  • # Plop

    Posté par  . Évalué à 4.

    Ca dépend totalement des applications ! Chaque application possède une base de donnée des types mimes. On peut modifier les entrées qu'il y a dedans, et le système nous demande parfois de le faire (quand il ne sait pas).
    Les applis peuvent aussi lire les premiers octets (magiques) du fichier (MZ pour certains prog win, ?ELF pour les fichiers ELF, 0xcafebabe pour du Java compilé, ...).
    Un standard de base de données mime existe, utilisé entre autres par Gnome, XFCE, GTK+ ou ROX.



    [The shared MIME database] http://www.freedesktop.org/wiki/Standards_2fshared_2dmime_2dinfo_2d(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.