我可能有错误的想法,但我认为:
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 类型是对文件内容的描述。fred
和fred.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“猜测”文件类型并打开与该类型相关的程序。