首页/系统/Linux 运维命令速查/file 识别文件真实类型
文件与目录76 条

file 识别文件真实类型

基于文件头魔法字节判断真实类型,不依赖扩展名;收到来源不明的文件先用它验明正身。

Linux 运维命令速查系统更新于 2026-10-13

file 是什么

file 通过读取文件开头的魔法字节(magic number)来判断真实类型,而不是看扩展名。它的规则库来自 libmagic,覆盖面很广:文本文件能进一步区分编码(ASCII、UTF-8、ISO-8859),可执行文件能报出架构与链接方式,压缩包与归档格式也能识别。收到来源不明的文件、怀疑扩展名被改过、或不确定某个二进制是不是给错了 CPU 架构时,先用它验明正身。

基本信息

用途识别文件的真实类型、编码与可执行文件架构
语法file [选项] 文件...(可一次传多个文件或目录)
所属软件包file(规则来自 libmagic,各发行版默认安装)
常用选项-i 输出 MIME 与字符集、-b 只输出描述、-z 继续看压缩包内部、-f 从文件读入待检列表

典型使用场景

  • 验身来源不明的文件:先确认它到底是文本、二进制还是压缩包,再决定怎么处理
  • 怀疑扩展名被改:upload.jpg 实际是可执行文件这类情况,用 file 一眼看穿
  • 架构核对:部署二进制前确认是 x86-64 还是 aarch64,避免上机才报格式错误
  • 编码确认:脚本报语法错误、中文乱码时,先确认文件是 UTF-8 还是其它编码
  • 批量归档前分类:对一批文件输出 MIME,便于按类型分流处理

常用示例

常用示例
file backup.dat                       # 最基本的判断
file -i upload.bin                    # 输出 MIME 类型与字符集
file -b mystery                       # 只要描述,便于脚本消费
file /bin/ls /usr/local/bin/app       # 确认架构与链接方式
file -z archive.gz                    # 顺着压缩包看内部第一个文件
find /data/inbox -type f -print0 | xargs -0 -r file -b | sort | uniq -c | sort -rn

常见输出含义

输出片段含义怎么用
ASCII text纯 ASCII 文本可以直接用文本工具处理
UTF-8 Unicode textUTF-8 文本中文文件正常形态
ISO-8859 text单字节西欧编码中文环境常需转码后再读
ELF 64-bit LSB executable, x86-6464 位 x86 可执行文件确认与目标机器架构一致
ELF 64-bit LSB shared object共享库被程序加载的 .so 文件
gzip compressed datagzip 压缩数据用 zcat 或 gunzip 读取
data未识别的二进制配合 xxd 或 od 看头部字节再判断
empty空文件注意是否为异常中断产生的空产物
file -i 给出的 charset 也可能是 unknown-8bit,表示它按二进制处理。遇到这种情况先别急着当成损坏,可能只是格式较新或规则库偏旧,用 xxd 看头几个字节往往能更快定性。
file 只读头部字节,被截断或刻意伪造头部的文件会被误判。对安全相关的重要文件,类型判断之后还要配合 sha256sum 校验摘要,两者结合才有意义。

易错点

  • 拿 file 的结论当作安全性证明:它能识别格式,不能证明内容无害,可疑文件仍需摘要校验甚至隔离检查
  • 把 MIME 判断写进业务逻辑却不处理空文件与未知类型:file 对空文件返回 empty,对未知二进制返回 data,脚本要显式分支
  • 在中文环境用 file -i 只看 charset 就断定文件正常:编码与内容正确性是两回事,仍然需要实际读取验证
  • 对超大文件反复调用 file:它只读头部,开销很小,但一次传几千个文件时仍建议用 xargs 批量并控制并发

数据来源与参考

  • man 1 file(libmagic 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌