Les extensions de fichiers ont-elles une utilité (pour le système d'exploitation)?

66

Linux détermine le type d'un fichier via un code dans l'en-tête du fichier. Cela ne dépend pas des extensions de fichiers pour savoir quel logiciel utiliser pour ouvrir le fichier.

C'est ce que je me souviens de mon éducation. S'il vous plaît corrigez-moi au cas où je me trompe!

Travailler un peu avec les systèmes Ubuntu récemment: je vois beaucoup de fichiers sur les systèmes qui ont des extensions comme .sh , .txt , .o , .c

Maintenant, je me demande: ces extensions sont-elles destinées uniquement aux humains? Pour que l'on puisse avoir une idée du type de fichier, il s'agit de

Ou ont-ils une utilité pour le système d’exploitation également?

    
posée mizech 27.07.2016 - 08:46
la source

7 réponses

37
  

Linux détermine le type d'un fichier via un code dans l'en-tête du fichier. Il ne dépend pas des extensions de fichiers à connaître avec le logiciel est à utiliser pour ouvrir le fichier.

     

C'est ce que je me souviens de mon éducation. S'il vous plaît corrigez-moi au cas où je me trompe!

  • correctement mémorisé.
  

Ces extensions sont-elles destinées uniquement aux humains?

  • Oui, avec un mais.

Lorsque vous interagissez avec d’autres systèmes d’exploitation dépendant de l’extension des extensions, c’est l’idée la plus judicieuse de les utiliser.

Sous Windows, l'ouverture du logiciel est associée aux extensions.

Ouvrir un fichier texte nommé "fichier" est plus difficile sous Windows que d’ouvrir le même fichier nommé "fichier.txt" (vous devrez basculer le dialogue d’ouverture de fichier de *.txt à *.* à chaque fois). Il en va de même pour les fichiers texte séparés par des tabulations et des points-virgules. Il en va de même pour l'importation et l'exportation de courriers électroniques (extension .mbox).

En particulier lorsque vous codez un logiciel. Ouvrir un fichier nommé "software1" qui est un fichier HTML et "software2" qui est un fichier JavaScript devient plus difficile que "software.html" et "software.js".

S'il existe un système sous Linux dans lequel les extensions de fichiers sont importantes, j'appellerais cela un bogue. Lorsque le logiciel dépend d'extensions de fichiers, c'est exploitable. Nous utilisons une directive d'interpréteur pour identifier ce qu'est un fichier ("les deux premiers octets d'un fichier peuvent être les caractères" # ! ", qui constituent un nombre magique (hexadécimal 23 et 21, les valeurs ASCII de" # "et"! ") souvent appelées shebang,").

Le problème le plus connu des extensions de fichiers était LOVE-LETTER-FOR-YOU.TXT.vbs sous Windows. Ceci est un script visuel de base affiché dans l'explorateur de fichiers sous forme de fichier texte.

Dans Ubuntu, lorsque vous démarrez un fichier à partir de Nautilus, vous obtenez un avertissement sur ce qu’il va faire. Exécuter un script à partir de Nautilus où il veut démarrer un logiciel où il est censé ouvrir gEdit est un problème évident et nous avons un avertissement à ce sujet.

En ligne de commande, lorsque vous exécutez quelque chose, vous pouvez voir visuellement l’extension. Si elle se termine sur .vbs, je commencerais à devenir suspect (pas que .vbs soit exécutable sous Linux, du moins pas sans plus d’efforts;)).

    
réponse donnée Rinzwind 27.07.2016 - 09:01
la source
64

Il n’ya pas de réponse 100% noire ou blanche ici.

Habituellement Linux ne s'appuie pas sur les noms de fichiers (et les extensions de fichiers, c'est-à-dire la partie du nom de fichier après la dernière période) et détermine le type de fichier en examinant les premiers octets de son contenu et en le comparant à une liste de chiffres magiques connus .

Par exemple, tous les fichiers image Bitmap (généralement avec le nom extension .bmp ) doivent commencer par les lettres BM dans leurs deux premiers octets. Les scripts dans la plupart des langages de script comme Bash, Python, Perl, AWK, etc. (essentiellement tout ce qui traite les lignes commençant par # comme commentaire) peuvent contenir un shebang comme #!/bin/bash comme première ligne. Ce commentaire spécial indique au système avec quelle application ouvrir le fichier.

Donc, normalement, le système d'exploitation s'appuie sur le contenu du fichier et non sur son nom pour déterminer le type de fichier, mais déclarer que les extensions de fichier ne sont jamais nécessaires sous Linux ne représente que la moitié.

Les applications peuvent bien sûr implémenter leurs vérifications de fichiers comme elles le souhaitent, ce qui inclut la vérification du nom du fichier et de l’extension. Un exemple est Eye of Gnome ( eog , visualiseur d'images standard) qui détermine le format de l'image par l'extension de fichier et génère une erreur si elle ne correspond pas au contenu. Que ce soit un bug ou une fonctionnalité peut être discuté ...

Toutefois, même certaines parties du système d'exploitation reposent sur des extensions de nom de fichier, par exemple Lors de l'analyse des fichiers de vos sources logicielles dans /etc/apt/sources.list.d/ - seuls les fichiers portant l'extension *.list sont analysés tous les autres sont ignorés. Ce n'est peut-être pas principalement utilisé pour déterminer le type de fichier ici, mais plutôt pour activer / désactiver l'analyse de certains fichiers, mais c'est toujours une extension de fichier qui affecte la façon dont le système traite un fichier.

Et bien sûr, l’utilisateur humain profite le plus des extensions de fichiers car cela rend le type de fichier évident et permet également plusieurs fichiers avec le même nom de base et des extensions différentes comme site.html , site.php , site.js , site.css etc. L'inconvénient est bien sûr que l'extension de fichier et le type / contenu de fichier ne doivent pas nécessairement correspondre.

De plus, il est nécessaire pour une interopérabilité inter-plate-forme, par ex. Windows ne saura pas quoi faire avec un fichier readme , mais seulement readme.txt .

    
réponse donnée Byte Commander 27.07.2016 - 09:22
la source
23

Comme mentionné par d’autres, sous Linux, une méthode de directive d’interpréteur est utilisée (en stockant certaines métadonnées dans un fichier en tant qu’en-tête ou chiffre magique pour que l’interprète puisse le lire) plutôt que la méthode d’association d’extension de fichier utilisée par Windows .

Cela signifie que vous pouvez créer un fichier avec presque n'importe quel nom que vous aimez ... à quelques exceptions près

Cependant

Je voudrais ajouter un mot de prudence.

Si vous avez des fichiers sur votre système à partir d’un système qui utilise l’association de noms de fichiers, les fichiers peuvent ne pas avoir ces nombres magiques ou en-têtes. Les extensions de nom de fichier sont utilisées pour identifier ces fichiers par les applications capables de les lire, et vous pouvez rencontrer des effets inattendus si vous renommez ces fichiers. Par exemple:

Si vous renommez un fichier My Novel.doc en My-Novel , Libreoffice sera toujours en mesure de l’ouvrir, mais il s’ouvrira en tant que "Sans titre" et vous devrez le nommer à nouveau pour pouvoir le sauvegarder (Libreoffice ajoute un extension par défaut, vous auriez alors deux fichiers My-Novel et My-Novel.odt , ce qui pourrait être agaçant)

Plus sérieusement, si vous renommez un fichier My Spreadsheet.xlsx en My-Spreadsheet, puis essayez de l’ouvrir avec xdg-open My-Spreadsheet , vous obtiendrez ceci (parce qu’il s’agit en fait d’un fichier compressé):

Et si vous renommez un fichier My Spreadsheet.xls à My-Spreadsheet , vous obtenez une erreur en indiquant

  

emplacement d'ouverture d'erreur: aucune application n'est enregistrée en tant que traitement de ce fichier

(Bien que dans ces deux cas cela fonctionne correctement si vous ne le faites pas xdg-open My-Spreadsheet )

Si vous renommez ensuite le fichier sans extension en soffice My-Spreadsheet avec My-Spreadsheet.ods et essayez de l'ouvrir, vous obtiendrez ceci:

(la réparation échoue)

Et vous devrez remettre l’extension originale pour ouvrir le fichier correctement (vous pouvez ensuite convertir le format si vous le souhaitez)

TL; DR:

Si vous avez des fichiers non natifs avec des extensions de nom, ne supprimez pas les extensions en supposant que tout ira bien!

    
réponse donnée Zanna 27.07.2016 - 10:06
la source
19

Je voudrais adopter une approche différente des autres réponses, et remettre en question la notion selon laquelle "Linux" ou "Windows" ont quelque chose à voir avec cela (supportez-moi).

Le concept d'extension de fichier peut être simplement exprimé comme "une convention d'identification du type d'un fichier basé sur une partie de son nom". Les autres conventions courantes pour identifier le type d'un fichier comparent son contenu à une base de données de signatures connues (l'approche "nombre magique") et la stockent en tant qu'attribut supplémentaire sur le système de fichiers (approche utilisée dans le MacOS d'origine). .

Comme chaque fichier sur un système Windows ou Linux a à la fois un nom et un contenu, les processus qui veulent connaître le type de fichier peuvent utiliser les approches "extension" ou "nombre magique" comme ils l'entendent. L'approche des métadonnées n'est généralement pas disponible, car il n'y a pas de place standard pour cet attribut sur la plupart des systèmes de fichiers.

Sous Windows, il est de tradition d’utiliser l’extension de fichier comme principal moyen d’identifier un fichier; le plus visiblement, le navigateur de fichiers graphique (Gestionnaire de fichiers sur Windows 3.1 et Explorer sur Windows moderne) l’utilise lorsque vous double-cliquez sur un fichier pour déterminer l’application à lancer. Sur Linux (et plus généralement sur les systèmes Unix), l'inspection du contenu est plus traditionnelle. Plus particulièrement, le noyau regarde le début d'un fichier exécuté directement pour déterminer comment l'exécuter. Les fichiers de script peuvent indiquer un interpréteur à utiliser en commençant par #! suivi du chemin d'accès à l'interpréteur.

Ces traditions influencent la conception de l'interface utilisateur des programmes écrits pour chaque système, mais il existe de nombreuses exceptions, car chaque approche présente des avantages et des inconvénients dans différentes situations. Les raisons d'utiliser les extensions de fichiers plutôt que d'examiner le contenu incluent:

  • l'examen du contenu des fichiers est assez coûteux par rapport à l'examen des noms de fichiers; ainsi, par exemple, "trouver tous les fichiers nommés * .conf" sera beaucoup plus rapide que "trouver tous les fichiers dont la première ligne correspond à cette signature"
  • le contenu du fichier peut être ambigu; de nombreux formats de fichiers ne sont en fait que des fichiers texte traités de manière spécifique, de nombreux autres sont des fichiers zip spécialement structurés, et la définition de signatures précises pour ces fichiers peut être délicate
  • un fichier peut être réellement valide en tant que plusieurs types; un fichier HTML peut également être un fichier XML valide, un fichier zip et un fichier GIF concaténé restent ensemble pour les deux formats
  • la correspondance des nombres magiques peut conduire à des faux positifs; un format de fichier sans en-tête peut commencer par les octets "GIF89a" et être identifié à tort comme une image GIF
  • renommer un fichier peut être un moyen pratique de le marquer comme "désactivé"; par exemple. changer "foo.conf" en "foo.conf ~" pour indiquer qu'une sauvegarde est plus facile que l'édition du fichier pour commenter toutes ses directives, et plus pratique que de le sortir d'un répertoire chargé automatiquement; de même, renommer un fichier .php en .txt indiquera à Apache de servir sa source en texte brut, plutôt que de le transmettre au moteur PHP

Exemples de programmes Linux qui utilisent des noms de fichiers par défaut (mais peuvent avoir d’autres modes):

  • gzip et gunzip traitent tout fichier se terminant par ".gz"
  • gcc gérera les fichiers ".c" en C, et ".cc" ou ".C" en C ++
réponse donnée IMSoP 27.07.2016 - 19:13
la source
14

En fait, certaines technologies font reposent sur des extensions de fichiers, donc si vous utilisez ces technologies dans Ubuntu, vous devrez également vous fier aux extensions. Quelques exemples:

  • gcc utilise des extensions pour distinguer les fichiers C an C ++. Sans l'extension, il est pratiquement impossible de les différencier (imaginez un fichier C ++ sans classes).
  • de nombreux fichiers ( docx , jar , apk ) ne sont que des archives ZIP particulièrement structurées. Bien que vous puissiez généralement déduire le type du contenu, cela n'est pas toujours possible (par exemple, le Manifeste Java est facultatif dans les fichiers jar ).

Ne pas utiliser les extensions de fichiers dans de tels cas ne sera possible qu'avec des solutions de contournement et sera probablement très sujet aux erreurs.

    
réponse donnée Dmitry Grigoryev 27.07.2016 - 17:52
la source
7

Votre première hypothèse est correcte: les extensions sous Linux n’ont pas d’importance et ne sont utiles que pour les humains (et les autres systèmes d’exploitation non-Unix qui se soucient des extensions). Le type d'un fichier est déterminé par les 32 premiers bits de données du fichier, appelé nombre magique C'est pourquoi les scripts shell ont besoin de #! line - pour indiquer au système d'exploitation quel interpréteur appeler. Sans elle, le script shell n'est qu'un fichier texte.

En ce qui concerne les gestionnaires de fichiers, ils veulent connaître les extensions de certains fichiers, tels que les fichiers .desktop , qui sont fondamentalement les mêmes que ceux des raccourcis de Windows, mais avec plus de fonctionnalités. Mais en ce qui concerne OS, il a besoin de savoir ce que contient le fichier, et non ce qui est dans son nom

    
réponse donnée Sergiy Kolodyazhnyy 27.07.2016 - 09:02
la source
5

C'est trop gros pour une réponse à un commentaire.

Gardez à l’esprit que même les «extensions» ont beaucoup de significations différentes.

Ce dont vous parlez semble être les 3 lettres après le. DOS a rendu le format 8.3 très populaire et Windows utilise la partie 0.3 à ce jour.

Linux a beaucoup de fichiers comme .conf ou .list ou .d ou .c qui ont un sens, mais ne sont pas vraiment des extensions au sens 8.3. Par exemple, Apache examine la directive de configuration de /etc/apache2/sites-enabled/website.conf. Alors que le système utilise les types MIME et les en-têtes de contenu et que ce qu'il ne faut pas déterminer, c'est un fichier texte, Apache (par défaut) ne va toujours pas le charger sans qu'il se termine par .conf.

.c est un autre excellent. Oui, c'est un fichier texte, mais gcc dépend de main.c devenant main.o et enfin main (après la liaison). A aucun moment, le système n'utilise l'extension .c, .o ou no pour avoir un sens en ce qui concerne le contenu, mais ce qui suit. a un sens. Vous devrez probablement configurer votre SCM pour ignorer main.o et main.

Le point étant le suivant: les extensions ne sont pas utilisées comme elles le sont dans Windows. Le noyau n'exécutera pas un fichier .txt car vous supprimez la partie .txt du nom. Il est également très heureux d'exécuter un fichier .txt si l'autorisation d'exécution est définie. Cela étant dit, ils ont un sens et sont toujours utilisés sur un "niveau informatique" pour beaucoup de choses.

    
réponse donnée coteyr 27.07.2016 - 11:15
la source

Lire d'autres questions sur les étiquettes