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

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

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

MIME 类型是识别代码,嵌入里面一份文件。
文件 .extensions是识别码,作为文件后缀姓名

我认为,从我在黑暗时代听到的一些东西来看,Linux 与 .extension 是无关的......(也许是在早期,从那时起事情就发生了变化......?)

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

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

这里是否存在明确的等级制度?

答案1

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

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

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

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

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

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

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

答案2

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

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

文件实际上并不包含此 MIME 类型,但打开这些文件的程序会使用各种方法来判断此 MIME 类型。有些程序仅依赖文件扩展名,但大多数程序会使用多种技术,包括查看文件开头的数据。

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

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

答案3

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

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

  • 扩展
  • 文件系统中的特殊属性(例如符号或硬链接、文件夹、输入设备等)
  • 内容
    • 二进制(如可执行文件中的 ELF 信息)
    • 文本(如<html>#!/bin/bash

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

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

相关内容