file
命令是类 Unix 系统中用于确定文件类型的工具。它通过检查文件的内容而不是根据文件的扩展名来判断文件的类型。这对于那些没有标准扩展名或被错误命名的文件特别有用。file
命令可以识别多种文件格式,包括文本文件、数据文件、可执行文件、目录等。
基本语法
file [选项] 文件...
file -C [选项] # 编译魔数文件
file --help # 显示帮助
描述
file
是一个用于判断文件类型的命令行工具,通过分析文件的头部数据(魔数)和内容特征来确定文件类型。其核心功能包括:
- 文件系统测试:检查文件属性(如大小、类型)。
- 魔数测试:通过文件开头的固定字节(魔数)识别文件格式(如可执行文件、压缩文件)。
- 语言测试:检测文本文件的语言类型(如 C 代码、Shell 脚本)。
常见文件类型判断:
- 文本文件:如
ASCII text
、UTF-8 Unicode text
。 - 二进制文件:如
ELF executable
、PE32 executable
。 - 压缩文件:如
gzip compressed data
、Zip archive
。 - 特殊文件:如
symbolic link
、directory
、socket
。
选项
基础选项
选项 | 描述 |
---|---|
-b, --brief | 不显示文件名,仅输出类型(适合批量处理)。 |
-h, --no-dereference | 不跟随符号链接(默认行为,除非 POSIXLY_CORRECT 环境变量设置)。 |
-L, --dereference | 跟随符号链接(如 ls -l 行为)。 |
-v, --version | 显示版本信息。 |
-0, --print0 | 用空字符(\0 )分隔文件名(配合 xargs -0 使用)。 |
输出控制
选项 | 描述 |
---|---|
-i, --mime | 输出 MIME 类型(如 text/plain; charset=us-ascii )。 |
--mime-type | 仅输出 MIME 类型(如 text/plain )。 |
--mime-encoding | 仅输出编码方式(如 quoted-printable )。 |
-F 分隔符 | 自定义文件名与结果间的分隔符(默认 : )。 |
-k, --keep-going | 继续检查所有匹配项,而非仅第一个(匹配结果前缀为 - )。 |
-r, --raw | 不转义不可打印字符(直接显示原始字节)。 |
文件与测试控制
选项 | 描述 |
---|---|
-m 文件或目录 | 指定自定义魔数文件或目录(覆盖默认路径)。 |
-C, --compile | 编译魔数文件为 .mgc 格式(加速后续检测)。 |
-c, --checking-printout | 检查魔数文件语法(调试用)。 |
-e 测试名 | 排除特定测试(如 ascii 、cdf )。 |
-s, --special-files | 检查特殊文件(如块设备、字符设备)。 |
-z, --uncompress | 自动解压文件并检测内容类型。 |
输入与输出增强
选项 | 描述 |
---|---|
-f 文件列表 | 从文件读取待检测的文件名(每行一个文件)。 |
-p, --preserve-date | 保留文件访问时间(模拟未读取文件)。 |
-n, --no-buffer | 即时输出结果(适合管道处理)。 |
-l | 列出魔数模式的匹配优先级。 |
退出状态
状态码 | 含义 |
---|---|
0 | 成功检测文件类型。 |
1 | 无法读取至少一个文件或检测失败。 |
2 | 命令行参数错误或 file 本身出错。 |
示例
示例 1:基本文件类型检测
file test.txt
# 输出:test.txt: ASCII text
示例 2:显示 MIME 类型
file -i report.pdf
# 输出:report.pdf: application/pdf; charset=binary
示例 3:检测压缩文件内容
file -z compressed.tar.gz
# 输出:compressed.tar.gz: gzip compressed data, from Unix, last modified: ...
示例 4:批量检测文件
file -f files.txt
# 从 files.txt 中读取文件列表并逐一检测。
示例 5:排除文本编码检测
file -e ascii binary_file
# 忽略文本编码测试,直接进行魔数检测。
常见问题
Q: 如何更新魔数文件?
A:
sudo file -C -m /usr/share/misc/magic
# 编译默认魔数目录为 .mgc 格式。
Q: 如何检测符号链接指向的内容?
A:
file -L symlink.txt
# 输出链接目标文件类型。
Q: 如何避免文件名中的冒号导致解析错误?
A:
file -F @ "file:name.txt"
# 使用 `-F @` 自定义分隔符,避免 `:` 冲突。
注意事项
-
魔数文件路径:
- 默认使用
/usr/share/misc/magic.mgc
或/usr/share/misc/magic
目录。 - 用户可自定义魔数文件(如
~/.magic
)。
- 默认使用
-
符号链接处理:
-h
保留符号链接本身信息,-L
显示链接指向文件类型。
-
特殊文件:
- 使用
-s
检测块设备(如/dev/sda1
)或字符设备(如/dev/tty
)。
- 使用
-
MIME 类型:
-i
输出包含字符集信息,--mime-type
精简为类型字段。
-
编码检测:
- 自动识别
ASCII
、UTF-8
、ISO-8859-x
等编码。
- 自动识别