MIME类型和文件扩展名之间有什么关系?

可能我理解有误,但我认为: MIME类型是嵌入在文件内部的标识代码。 文件扩展名是附加到文件名称后缀的标识代码。 我曾经从模糊的年代听说过Linux没有扩展名的概念...(也许在早期是这样的,但是现在情况已经改变了吗?) 我最近刚从Windows世界过来,在操作系统层面上,文件扩展名(据我所知)是将其与其相关应用程序关联的唯一方法。 因为我不知道原因,所以发现命名为“fred”的文件和命名为“fred.txt”的文件都可以在文本编辑器中打开,这让我感到有些不安。 这里是否有明确的等级制度在起作用?
3个回答

MIME类型只是一种命名类型的方式。它们与文件类型的确定方式无关。
确定文件类型有两种方法:a)查看其扩展名并希望它准确无误,或者b)查看其内容然后根据内容猜测。如果文件没有扩展名,那么只能选择b。
许多(二进制)文件格式都有特定的头部,您可以查看以确定其类型。这使得选项b对于这些类型非常可靠。
纯文本文件格式通常可以通过其结构来确定(如果文件包含大量HTML标签,则可能是HTML文件)。
在Unix和Linux系统上,您可以使用“file”命令行实用程序根据文件内容找出文件的类型。
文件管理器通常使用选项a和b的组合(例如,首先查看文件扩展名,如果不知道(或文件没有扩展名),则查看内容)。
普通Linux文件系统上不会将文件类型存储为元数据。

在Linux中,文件扩展名是文件名的一部分,实际上对操作系统没有任何意义。MIME类型是对文件内容的描述。fredfred.txt都将具有text/plain的MIME类型。
文件管理器(如Nautilus)使用此MIME类型来确定使用哪个程序打开文件。在终端中,xdg-open命令也可以实现相同的功能。然而,这只是用户空间级别的操作,并非操作系统级别。
文件本身并不包含MIME类型,但打开它们的程序会使用各种方法来确定该MIME类型。有些程序仅依赖于文件扩展名,但大多数程序使用了多种技术,包括查看文件开头的数据。
如果文件开头只包含可以表示为ASCII字符的字节,则可以安全地假设它是一个文本文件。如果扩展名是.html之类的,则程序会认为它是一个HTML页面,并使用Web浏览器打开。对于二进制文件格式也是同样的道理。例如,我知道位图文件格式以ASCII中的'BMP'开头,后跟表示图像的二进制数据。
简单来说,Linux程序根据文件中的数据和文件扩展名做出有根据的猜测。这听起来可能不太可靠,但所使用的算法比我给出的例子更加复杂,实际上非常准确。

这是一个合理的解释。 您知道一个可靠的来源,可以解释Linux实际上如何结合这些方法使用的算法吗? 或者其他可能的“实体”(无论是Nautilus、Gnome等)对此归属负责? - sancho.s ReinstateMonicaCellio

在Linux世界中,文件扩展名只是文件类型的一个指示器。 有一个命令行工具叫做"file",可以猜测文件的类型。
要获取这个类型,主要有三个指示器:
- 扩展名 - 文件系统中的特殊属性(如符号链接或硬链接、文件夹、输入设备等) - 内容 - 二进制(如可执行文件中的ELF信息) - 文本(如、#!/bin/bash)
文件类型和MIME类型之间的关系是,MIME只是表示文件类型的标准(如text/css)。
Linux会"猜测"文件类型,并打开与该类型相关联的程序。