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

Pet*_*r.O 21 mime-type file-association

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

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

我想,根据我在黑暗时代听到的一些事情,Linux 是 .extension 不可知论者......(也许是在早期,从那时起事情就发生了变化......?)

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

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

这里有明确的层次结构吗?

sep*_*p2k 16

MIME 类型只是命名类型的一种方式。它们与如何确定文件类型没有任何关系。

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

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

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

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

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

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


dv3*_*0ea 15

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

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

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

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

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


Lin*_*oln 5

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

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

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

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

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