MIME类型和File .extensions之间有什么关系?

我可能在这里有错误的想法,但我认为:

MIME类型是识别代码,嵌入文件中。
文件.extensions是标识代码,后缀为文件

我想,从我在昏暗的黑暗时代听到的东西,Linux是.extension不可知的……(也许是在早期,从那时起事情发生了变化……?)

我最近来自Windows世界,在操作系统级别 ,文件.extension是唯一的方法(据我所知)将其与相关的应用程序相关联。

因为我不知道为什么 ,我觉得有点令人不安的是,一个名为“fred”的文件一个名为“fred.txt”的文件都在文本编辑器中打开。

这里有明确的等级制度吗?

MIME类型只是一种命名类型的方法。 它们与确定文件类型的方式无关。

有两种方法可以确定文件的类型:a)查看其扩展名并希望它是准确的或b)查看其内容然后根据它进行猜测。 如果文件没有扩展名,则b是唯一选项。

许多(二进制)文件格式都有一个特定的标题,您可以查看它以确定其类型。 这使得选项b对于那些类型非常可靠。

纯文本文件格式通常可以通过它们的结构来确定(如果一个文件包含很多html标签,它可能是一个html文件)。

在unix和linux系统上,您可以使用file命令行实用程序根据文件内容查找文件类型。

文件管理器经常使用选项a和b的某种组合(例如,首先查看文件扩展名,如果它不知道(或文件没有扩展名),请查看内容)。

文件的类型不会作为元数据存储在常见的Linux文件系统上。

在Linux中,文件扩展名是文件名的一部分,实际上对操作系统没有任何意义。 MIME类型是文件内容的描述。 fredfred.txt都有MIME类型text/plain

文件管理器(如Nautilus)使用此MIME类型来了解打开文件的程序。 在终端中, xdg-open命令执行相同的操作。 但是,这是用户空间级别而非操作系统级别。

文件实际上并不包含此mime类型,但打开它们的程序使用各种方法来计算出这种MIME类型。 有些只依赖文件扩展,但大多数都使用混合技术,包括查看文件开头的数据。

如果文件的开头只包含可以表示为ASCII字符的字节,则可以安全地假设它是文本文件。 如果扩展名类似于.html,程序会假定它是一个HTML页面,因此使用Web浏览器打开它。 同样的事情适用于二进制文件格式。 例如,我知道位图文件格式以ASCII中的“BMP”开头,后跟表示图像的二进制数据。

简而言之,Linux程序根据文件中的数据及其文件扩展名做出有根据的猜测。 这可能听起来不太可靠,但所使用的算法比我给出的示例更复杂,并且实际上非常准确。

在linux世界中,文件扩展名只是文件类型的一个指示符。 有一个名为“file”的命令行工具,它可以猜测文件的类型。

要获得此类型,主要有3个指标:

  • 扩展名
  • 文件系统中的特殊属性(如sym-或hardlinks,文件夹,输入设备等)
  • 内容
    • 二进制(如可执行文件中的ELF信息)
    • 文本(如#!/bin/bash

文件类型和MIME类型之间的关系是,MIME只是表示文件类型的标准(如text/css )。

Linux“猜测”文件类型并打开该类型的关联程序。