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


19

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

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

我从昏暗的黑暗时代听说,Linux与扩展名无关...(也许是在早期,事情从那时起发生了变化……?)

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

因为我不知道为什么,所以发现在文本编辑器中同时打开了一个名为“ fred” 的文件一个名为“ fred.txt”的文件时,我感到有些不安。

这里有明确的工作层次吗?

Answers:


16

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

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

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

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

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

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

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


14

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

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

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

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

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


5

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

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.