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