文件格式的识别方式
1. 通过 Magic Number
- 文件的 Magic Number 是存储在文件头部的特定标识信息。
2. 文件扩展名(用户习惯)
- 扩展名(如
.txt
、.jpg
、.bzImage
)是用户约定的文件命名规则,但文件系统本身并不强制依赖扩展名。
3. 应用程序解析
- 应用程序会根据文件的内容(如 Magic Number 或特定结构)解析文件格式。例如:
- 链接器会根据 ELF 头解析可执行文件。
- 引导加载程序(如 GRUB)会解析 bzImage 文件格式。
Magic Number是什么
Magic Number 是指文件头部的一组特定字节序列,用于标识文件的类型或格式。它是一种文件的特征标识符,通常位于文件的开头,通过读取 Magic Number,可以快速判断文件的内容类型,无需依赖扩展名或其他元信息。
Magic Number 的位置和形式
- 位置:通常位于文件的最前面(头部的第一个几字节)。
- 形式:一组固定的二进制值,可能是整数、字符序列或特殊编码。
常见文件格式的 Magic Number
文件类型 | Magic Number (十六进制表示) | 描述 |
---|---|---|
JPEG 图像 | FF D8 FF | JPEG 文件的开始标识符 |
PNG 图像 | 89 50 4E 47 0D 0A 1A 0A | PNG 文件的开始标识符 |
GIF 图像 | 47 49 46 38 37 61 或 47 49 46 38 39 61 | GIF87a 或 GIF89a 格式标识符 |
PDF 文件 | 25 50 44 46 2D | PDF 文件的开始标识符 |
ZIP 压缩文件 | 50 4B 03 04 | ZIP 文件的文件头标识符 |
RAR 压缩文件 | 52 61 72 21 1A 07 00 | RAR 文件的文件头标识符 |
TAR 存档文件 | 75 73 74 61 72 | TAR 文件的标识符(GNU 格式) |
ISO 镜像文件 | 43 44 30 30 31 | ISO 9660 文件系统标识符 |
WAV 音频文件 | 52 49 46 46 xx xx xx xx (后四字节表示文件大小) | WAV 文件的开始标识符 |
MP3 音频文件 | FF FB 或 FF F3 或 FF F2 | MP3 文件的标识符 |
FLAC 音频文件 | 66 4C 61 43 | FLAC 文件的标识符 |
EXE 可执行文件 | 4D 5A | Windows 可执行文件的标识符 |
ELF 可执行文件 | 7F 45 4C 46 | ELF 格式的标识符 |
SQLite 数据库 | 53 51 4C 69 74 65 20 66 69 74 65 | SQLite 数据库文件的标识符 |
vmlinuz | 4D 5A | vmlinuz 是经过压缩的 Linux 内核映像,文件头 4D 5A (即 "MZ")表示它是一个 DOS 可执行文件头,通常由 gzip 压缩。 |
zImage | 1F 8B | zImage 是较小的压缩 Linux 内核映像,通常通过 gzip 压缩,1F 8B 是 gzip 文件格式的魔数。 |
bzImage | 1F 8B | bzImage 是大容量压缩的 Linux 内核映像,也使用 gzip 压缩,1F 8B 是 gzip 文件格式的魔数。 |
这些魔数对于操作系统或应用程序在处理文件时帮助识别文件类型,确保正确的解析和处理。
如何查看文件的 Magic Number
1. 使用 xxd
或 hexdump
读取文件头部的二进制数据:
xxd -l 16 /path/to/file # 查看文件的前 16 字节
hexdump -C /path/to/file | head -n 1
输出示例(ELF 文件):
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
2. 使用 file
命令
file
会自动读取文件头并解析 Magic Number:
file /path/to/file
输出示例:
/path/to/file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked
Magic Number 的限制
- 唯一性:不同文件类型的 Magic Number 应尽量唯一,避免冲突。
- 可靠性:某些文件可能没有 Magic Number,或 Magic Number 被损坏,工具可能无法正确识别。
- 依赖性:仅依赖 Magic Number 识别文件格式可能不够全面,需要结合其他信息判断。
总结
Magic Number 是文件格式的重要标识符,位于文件头部,通过一组固定的字节序列快速标识文件类型。它是操作系统和工具在处理文件时的关键信息之一,应用广泛且高效,但需要与其他判断机制结合使用以提高可靠性。