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 fichier 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 si 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? Alors qu’on devrait avoir une idée de quel type de fichier il s’agit?
Ou ont-ils également une utilité pour le système d'exploitation?
files
file-format
mime-type
mizech
la source
la source
gzip
,bzip2
,xz
- et ainsi de suite. Ces programmes utilisent des suffixes pour séparer la version compressée d'un fichier de celle non compressée qu'ils remplacent. Les programmes de compression se plaignent souvent d'un suffixe incorrect, même si le fichier est en fait un fichier compressé du type qu'il devrait gérer.Réponses:
Lorsque vous interagissez avec d'autres systèmes d'exploitation qui dépendent des extensions, il est plus judicieux de les utiliser.
Sous Windows, le logiciel d’ouverture est associé 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 changer la boîte de 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 tabulations. Il en va de même pour l'importation et l'exportation d'e-mails (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 comparé à "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 des extensions de fichier, cela est exploitable. Nous utilisons une directive 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é shebang,").
Le problème le plus connu concernant les extensions de fichier était LOVE-LETTER-FOR-YOU.TXT.vbs sous Windows. Il s'agit d'un script visuel basique affiché dans l'explorateur de fichiers sous forme de fichier texte.
Dans Ubuntu, lorsque vous démarrez un fichier à partir de Nautilus, vous recevez un avertissement indiquant ce qu'il va faire. Exécuter un script de Nautilus où il veut démarrer un logiciel où il est supposé ouvrir gEdit est un problème évident et nous recevons un avertissement à ce sujet.
En ligne de commande, lorsque vous exécutez quelque chose, vous pouvez voir visuellement quelle est l'extension. Si cela finissait avec .vbs, je deviendrais méfiant (pas que .vbs soit exécutable sous Linux. Du moins sans un effort supplémentaire;)).
la source
readme.txt
et le rendez exécutable. Si l'utilisateur l'exécute, il n'ouvre pas l'éditeur, mais exécute le code. À cet égard, rendre les extensions importantes (sans les cacher) est plus sûr et plus facile à expliquer pour les utilisateurs non avertis. Il existe d'autres différences (notamment ne pas exécuter les fichiers du répertoire actuel), mais elles n'ont rien à voir avec des extensions.readme.txt
fichier avec un éditeur de texte. Je viens d’essayer avec dolphin dans KDE, de créer un script shell en ajoutant une autorisation exécutable, de l’enregistrer en tant que.txt
et en cliquant dessus, ce qui l’ouvrira dans Kate. Si je le renomme en.sh
cliquant dessus, il s'exécute.file
est heuristique, non définie.Il n'y a pas de réponse à 100% en noir ou blanc ici.
Habituellement, Linux ne s'appuie pas sur les noms de fichiers (ni sur les extensions de fichier, c’est-à-dire la partie du nom de fichier après la dernière période), mais détermine le type de fichier en examinant les premiers octets de son contenu et en les comparant à une liste de nombres magiques connus . .
Par exemple, tous les fichiers image Bitmap (généralement avec l'extension de nom
.bmp
) doivent commencer par les lettresBM
de leurs deux premiers octets. Les scripts dans la plupart des langages de script tels que Bash, Python, Perl, AWK, etc. (essentiellement tout ce qui traite les lignes commençant par un#
commentaire) peuvent contenir un shebang comme#!/bin/bash
la 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 le fait de déclarer que les extensions de fichier ne sont jamais nécessaires sous Linux n’est que la moitié de la vérité.
Les applications peuvent bien sûr implémenter leurs contrôles de fichiers comme bon leur semble, ce qui inclut la vérification du nom du fichier et de son extension. Un exemple est Eye of Gnome (
eog
, visualiseur d'images standard), qui détermine le format de l'image à l'aide de l'extension de fichier et génère une erreur s'il ne correspond pas au contenu. Que ce soit un bug ou une fonctionnalité peut être discuté ...Cependant, même certaines parties du système d'exploitation dépendent des extensions de nom de fichier, par exemple, lors de l'analyse syntaxique des fichiers sources du logiciel
/etc/apt/sources.list.d/
: seuls les fichiers dont l'*.list
extension est analysée 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 , les bénéfices des utilisateurs humains les plus de extensions de fichier comme qui fait le type d'un fichier évident et permet également plusieurs fichiers avec le même nom de base et extensions différentes comme
site.html
,site.php
,site.js
,site.css
etc. L'inconvénient est bien sûr que l' extension du fichier et le réel type de fichier / contenu ne doivent pas nécessairement correspondre.De plus, il est nécessaire pour l’interopérabilité multi-plateformes, comme par exemple Windows ne saura pas quoi faire avec un
readme
fichier, mais seulement un fichierreadme.txt
.la source
#!
. Tout le reste dépend de la décision de certaines applications.eog
et je ne sais pas pourquoi ils s'intéressent au nom de fichier. Ceci est un bug à mon avis. Et bien sûr, si le fichier s'appelle "bmp" mais que son format de contenu ne correspond pas, il y aura aussi une erreur, bien sûr. Bien sûr, chaque application décide comment vérifier les fichiers, mais en général, les applications Linux ne doivent pas compter sur le nom. Btw, vous pouvez utiliser lafile
recommandation pour examiner les types de fichiers en fonction de leur contenu.file
utilitaire ne prouve vraiment rien; c'est un outil utile, qui pourrait exister sur n'importe quel système d'exploitation. Quelle partie fondamentale du système d'exploitation rend l'exécutionfile
plus "correcte" que l'annulation du nom de fichier?Comme mentionné par d’autres, sous Linux, une méthode de directive interpréteur est utilisée (stockant certaines métadonnées dans un fichier sous la forme d’un en-tête ou d’un nombre magique afin que l’interprète correct puisse le lire) plutôt que la méthode d’association d’extension de nom de fichier utilisée par Windows.
Cela signifie que vous pouvez créer un fichier avec presque n'importe quel nom ... à quelques exceptions près.
pourtant
Je voudrais ajouter un mot de prudence.
Si votre système contient des fichiers provenant d'un système utilisant l'association de nom de fichier, il est possible que ces fichiers ne possèdent pas ces numéros ou en-têtes magiques. 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
àMy-Novel
, LibreOffice sera toujours en mesure de l' ouvrir, mais elle ouvrira « Sans titre » et vous devrez le nommer à nouveau pour enregistrer (LibreOffice ajoute une extension par défaut, alors que vous auriez deux fichiersMy-Novel
etMy-Novel.odt
, ce qui peut être gênant)Plus sérieusement, si vous renommez un fichier My Spreadsheet.xlsx en My-Spreadsheet, essayez de l'ouvrir avec
xdg-open My-Spreadsheet
vous pour obtenir ceci (car il s'agit en fait d'un fichier compressé):Et si vous renommez un fichier
My Spreadsheet.xls
enMy-Spreadsheet
, lorsquexdg-open My-Spreadsheet
vous obtenez une erreur disant(Bien que dans les deux cas cela fonctionne bien si vous le faites
soffice My-Spreadsheet
)Si vous renommez le fichier à sans extension
My-Spreadsheet.ods
avecmv
et essayer de l' ouvrir , vous obtiendrez ceci:(la réparation échoue)
Et vous devrez remettre l'extension d'origine 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!
la source
J'aimerais aborder cette question d'une manière différente des autres réponses et contester la notion selon laquelle "Linux" ou "Windows" a tout à voir avec cela (supportez-moi).
Le concept d'extension de fichier peut être simplement exprimé comme "une convention permettant d'identifier le type d'un fichier en fonction d'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 (approche du "nombre magique") et le 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 souhaitent connaître le type de fichier peuvent utiliser l'approche "extension" ou "nombre magique" comme bon leur semble. L’approche par métadonnées n’est généralement pas disponible, car il n’existe pas d’emplacement 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'identification d'un fichier. de manière très visible, le navigateur de fichiers graphique (Gestionnaire de fichiers sous Windows 3.1 et Explorateur sous 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), il est de plus en plus courant d’inspecter le contenu; en particulier, le noyau examine 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 des programmes écrits pour chaque système par l'interface utilisateur, mais il existe de nombreuses exceptions, car chaque approche présente des avantages et des inconvénients dans des situations différentes. Les raisons d'utiliser les extensions de fichier plutôt que d'examiner le contenu incluent:
Exemples de programmes Linux qui utilisent les noms de fichiers par défaut (mais peuvent avoir d’autres modes):
la source
#!
au début. Tout fichier dont le ou les bits exécutables sont définis peut être exécuté de différentes manières.#!/bin/bash
et des signatures similaires spécifient simplement quel interprète utiliser. Si aucune signature de ce type n'est fournie, l'interpréteur de shell par défaut est utilisé. Un fichier ne contenant que les deux mots "Hello World", mais avec son bit d'exécution défini, tentera de trouver une commande "Hello" lors de son exécution.En fait, certaines technologies ne compter sur les extensions de fichiers, donc si vous utilisez ces technologies dans Ubuntu, vous devrez compter sur les extensions aussi. Quelques exemples:
gcc
utilise des extensions pour faire la distinction entre les fichiers C et C ++. Sans l'extension, il est pratiquement impossible de les différencier (imaginez un fichier C ++ sans classes).docx
,jar
,apk
) sont tout particulièrement structurés archives ZIP. Bien que vous puissiez généralement déduire le type à partir du contenu, il se peut que cela ne soit pas toujours possible (par exemple, Manifest Java est facultatif dans lesjar
fichiers).Ne pas utiliser d'extensions de fichier dans de tels cas ne sera possible qu'avec des solutions de contournement de hacky et sera probablement très sujet aux erreurs.
la source
gcc
est le frontal pour les fichiers C; pour les fichiers C ++, vous devez utiliser leg++
commutateur frontal ou un commutateur de ligne de commande pour spécifier la langue. Plus important est lemake
programme qui décide d'utilisergcc
oug++
de créer un fichier particulier - et quimake
dépend entièrement des modèles de nom de fichier (principalement des extensions) pour sa correspondance avec les règles..cc
extension avecgcc
, il sera vraiment compilé en C ++, et ceci est documenté dansman gcc
: "Pour tout fichier d'entrée donné, le suffixe du nom de fichier détermine le type de compilation effectué:" suivi d'une liste de extensions et comment elles sont traitées.make
est un bon exemple également, maisgcc
repose tout autant sur les noms de fichiers. Voici un exemple plus clair que.c
vs.cc
: pour C,gcc
utilise des suffixes pour indiquer si sa première étape consiste à prétraiter (.c
), compiler (.i
), assemble (.s
) ou link (.o
). Ici, j’utilise-E
,-S
et-c
pour diregcc
où arrêter , mais il utilise des noms de fichiers pour savoir par où commencer .gcc something.cc
ne sera pas lié aux bonnes bibliothèques pour C ++, mais le fichier sera traité comme C ++, ce qui explique pourquoi de nombreux utilisateurs sont désorientés par les messages d'erreur qu'ils obtiennent lorsqu'ils commettent cette erreur.Votre première hypothèse est correcte: les extensions sous Linux n’importent pas et ne sont utiles que pour les humains (et les autres systèmes d’exploitation non apparentés à Unix qui s’occupent des extensions). Le type d'un fichier est déterminé par les 32 premiers bits de données qu'il contient, ce que l'on appelle un nombre magique. C'est pourquoi les scripts shell ont besoin d'une
#!
ligne pour indiquer au système d'exploitation quel interpréteur appeler. Sans cela, le script shell n'est qu'un fichier texte.En ce qui concerne les gestionnaires de fichiers, ils souhaitent connaître les extensions de certains fichiers, tels que les
.desktop
fichiers, qui sont fondamentalement les mêmes que la version Windows des raccourcis mais avec davantage de fonctionnalités. Mais en ce qui concerne le système d'exploitation, il doit savoir ce qu'il y a dans le fichier, pas ce qu'il y a dans son nom.la source
gunzip
qui ne décompresse pas un fichier s'il n'est pas appeléfoo.gz
.gunzip
est un exemple,eog
est un autre. En outre, de nombreux outils ne pourront pas compléter automatiquement les noms sans la bonne extension. Tout ce que je dis, c'est que c'est un peu plus compliqué que "les extensions sont toujours sans importance".C'est trop gros pour une réponse de commentaire.
Gardez à l'esprit que même "extension" a beaucoup si différentes significations.
Ce que 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 .3 à ce jour.
Linux a beaucoup de fichiers comme .conf ou .list ou .d ou .c qui ont une signification, mais ne sont pas vraiment des extensions au sens 8.3. Par exemple, Apache examine /etc/apache2/sites-enabled/website.conf pour sa directive de configuration. Bien que le système utilise les types MIME et les en-têtes de contenu pour ne pas déterminer qu'il s'agit d'un fichier texte, Apache (par défaut) ne le charge toujours pas sans se terminer par .conf.
.c est un autre excellent. Oui, c'est un fichier texte, mais gcc dépend de main.c qui devient main.o et enfin principal (après avoir lié). À aucun moment, le système n’utilise l’extension .c, .o ou no pour donner un sens quelconque au contenu mais aux éléments suivants. a une signification. Vous devriez probablement configurer votre SCM pour ignorer main.o et main.
Voici le point: les extensions ne sont pas utilisées telles quelles dans les fenêtres. Le noyau n'exécutera pas de 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 encore utilisés au "niveau informatique" pour beaucoup de choses.
la source
x.3
schéma de nommage plus, vous avez des extensions plus là, ainsi que.doxc
,.torrent
,.part
, etc. Il est juste que de nombreux formats et extensions de fichier ont déjà été définies en arrière à l'époque où 8.3 nomination était encore une chose et plus tard la plupart du temps, les formats ont tout simplement adapté la convention consistant à utiliser jusqu'à 3 lettres.gzip
votre Makefile, etc.) peuvent être écrits pour utiliser cette convention afin de faire des suppositions sur l'action correcte à effectuer sur chaque fichier.dir
à une invite de commande ne me dira rien de tel; il s'en fiche tout simplement. L’exécution de fichiers est certainement une exception, sur les deux systèmes d’exploitation; si la question se limitait à celles-ci, la réponse serait que DOS / Windows ne se préoccupe que du nom, et Unix / Linux ne se soucie que de l'autorisation d'exécution et des premiers octets du fichier. En dehors de cela, il y a toujours une application qui choisit une convention à suivre.