我可能在这里有错误的想法,但我认为:
MIME 类型是嵌入在文件中的识别代码。
文件 .extensions是识别代码,以文件名为后缀。
我认为,从我在昏暗的黑暗时代听到的一些话,Linux 与 .extension 无关......(也许是在早期,从那以后情况发生了变化......?)
我最近来自 Windows 世界,在操作系统级别,文件 .extension 是(据我所知)将其与其相关应用程序相关联的唯一方法。
因为我不知道为什么,我发现一个名为“fred”的文件和一个名为“fred.txt”的文件都在文本编辑器中打开有点令人不安。
这里有明确的等级制度吗?
MIME 类型只是命名类型的一种方式。它们与如何确定文件类型没有任何关系。
有两种方法可以确定文件的类型:a)查看其扩展名并希望它准确或 b)查看其内容,然后据此猜测。如果文件没有扩展名 b 是唯一的选择。
许多(二进制)文件格式都有一个特定的标题,您可以查看它来确定它们的类型。这使得选项 b 对于这些类型非常可靠。
纯文本文件格式通常可以通过它们的结构来确定(如果一个文件包含很多 html 标签,它可能是一个 html 文件)。
在 unix 和 linux 系统上,您可以使用
file
命令行实用程序根据文件的内容找出文件的类型。文件管理器经常使用选项 a 和 b 的某种组合(例如,首先查看文件扩展名,如果不知道(或文件没有扩展名),请查看内容)。
文件的类型不作为元数据存储在常见的 linux 文件系统上。
在 Linux 中,文件扩展名是文件名的一部分,实际上对操作系统没有任何意义。MIME 类型是对文件内容的描述。
fred
并且fred.txt
两者都有一个 MIME 类型text/plain
。文件管理器(例如 Nautilus)使用此 MIME 类型来了解使用哪个程序打开文件。在终端中,该
xdg-open
命令执行相同的操作。但是,这是用户空间级别而不是操作系统级别。文件实际上并不包含这种 MIME 类型,但打开它们的程序使用各种方法来确定这种 MIME 类型是什么。有些仅依赖文件扩展名,但大多数使用混合技术,包括查看文件开头的数据。
如果文件的开头只包含可以表示为 ASCII 字符的字节,则可以安全地假定它是一个文本文件。如果扩展名类似于 .html,则程序假定它是一个 HTML 页面,因此使用 Web 浏览器打开它。同样的事情也适用于二进制文件格式。例如,我知道位图文件格式以 ASCII 中的“BMP”开头,然后是表示图像的二进制数据。
简而言之,Linux 程序根据文件中的数据及其文件扩展名做出有根据的猜测。这听起来可能不太可靠,但使用的算法比我给出的示例更复杂,实际上非常准确。
在 linux 世界中,文件扩展名只是文件类型的一个指标。有一个名为“file”的命令行工具可以猜测文件的类型。
要获得这种类型,主要有3个指标:
<html>
,#!/bin/bash
)文件类型和 MIME 类型之间的关系是,MIME 只是表示文件类型的标准(如
text/css
)。Linux“猜测”文件类型并打开该类型的关联程序。