首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不是文件后缀,文件类型是如何知道的?

如果不是文件后缀,文件类型是如何知道的?
EN

Unix & Linux用户
提问于 2015-06-03 11:21:53
回答 6查看 6.9K关注 0票数 56

如果文件名没有后缀,我想知道文件类型是如何知道的。

例如,名为myfile的文件可以是二进制文件或文本文件,系统如何知道文件是二进制文件还是文本文件?

EN

回答 6

Unix & Linux用户

回答已采纳

发布于 2015-06-03 12:08:37

file实用程序通过3种方式确定文件类型:

首先,文件系统测试:在这些测试中,对文件调用一个状态系列系统调用。这将返回不同的unix文件类型:常规文件、目录、链接、字符设备、块设备、命名管道或套接字。取决于此,魔术测试就完成了。

魔术测试要复杂一些。文件类型由一个名为魔法文件的模式数据库猜测。某些文件类型可以通过读取文件中特定位置的位或数字来确定(例如,二进制文件)。魔术文件包含“魔术数字”来测试文件是否包含它们,以及应该打印哪些文本信息。这些“魔术数字”可以是1-4字节值、字符串、日期,甚至是正则表达式。通过进一步的测试,可以找到更多的信息。对于可执行文件,附加信息将是动态链接还是非剥离或体系结构。有时,必须通过多个测试才能真正识别文件类型。但是无论如何,不管执行了多少个测试,这总是一个很好的猜测。

以下是一些常见文件类型文件中的前8个字节,可以帮助我们了解这些神奇数字的外观:

代码语言:javascript
复制
             Hexadecimal          ASCII
PNG   89 50 4E 47|0D 0A 1A 0A   ‰PNG|....
JPG   FF D8 FF E1|1D 16 45 78   ÿØÿá|..Ex
JPG   FF D8 FF E0|00 10 4A 46   ÿØÿà|..JF
ZIP   50 4B 03 04|0A 00 00 00   PK..|....
PDF   25 50 44 46|2D 31 2E 35   %PDF|-1.5

如果无法通过魔术测试找到该文件类型,则该文件似乎是一个文本文件,file将查找内容的编码。编码由构成每个集合中可打印文本的不同范围和字节序列来区分。

还将根据其HEX值对断线进行调查:

  • 0A (\n)对Un*x/Linux/BSD/OSX终止文件进行分类
  • 0D 0A (\r\n)是Microsoft操作系统的文件。
  • 0D (\r)将一直使用Mac OS,直到版本9。
  • 15 (\025)将是IBMs AIX

现在语言测试开始了。如果该文件看起来是文本文件,则会搜索特定的字符串,以确定它包含哪种语言(C、Perl、Bash)。在脚本的第一行中,还可以通过哈什邦 (#!/bin/interpreter)识别一些脚本语言。

如果不适用于该文件,则无法确定文件类型,file只打印“数据”。

所以,你看没有必要用后缀。不管怎么说,如果设置错了,后缀可能会混淆。

票数 84
EN

Unix & Linux用户

发布于 2015-06-03 14:25:10

通常情况下,它并不在乎。你只需把它传递给一个程序,它要么解释它,要么它不解释它。在文本编辑器中打开一个.jpg可能没有用,但没有阻止你这样做。像文件名的其他部分一样,扩展是为了人类的组织方便。

还可以构造可以以多种方式有效解释的文件。因为ZIP文件格式开始时在文件末尾有一个头,所以您可以将其他内容放在前面,并且它仍然将作为一个ZIP文件加载。这通常用于制作自解压缩的zip文件。

票数 20
EN

Unix & Linux用户

发布于 2015-06-03 11:39:42

首先要检查的是内核识别的硬编码文件类型。这些文件类型包括目录、字符-特殊文件、块-特殊文件、管道-特殊文件、套接字和符号链接。此信息来自文件的inode。如果该文件是一个普通文件,则通过查找模式,下一组信息来自前256个字节。因此,通过检查这些字节,可以识别文本文件和C源代码。此外,这些实用程序还寻找用于测试和验证文件类型的神奇数字。可以通过将信息添加到文件/etc/magic来添加要识别的自己的文件类型。请参考magic(5)手册页查看神奇文件的格式。

在较早的实现(例如Solaris)中,文件/etc/magic枚举了可识别的大多数文件类型。

票数 7
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/207276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档