file 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于文件与目录命令族(见文件与目录命令族)。扩展名是骗人的,它看的是文件本身的"基因"。
file 探测文件的真实类型。它不看扩展名(.txt 可能是图片),而是读文件开头的"魔数"(Magic Number,特定字节特征)来判断——比如 PNG 开头是 ‰PNG、ELF 可执行是 0x7f ELF。
一、基本用法
bash
file unknown.bin # 输出:ELF 64-bit LSB executable ...
file photo.dat # 输出:PNG image data, 1920 x 1080
file script.sh # 输出:Bourne-Again shell script, ASCII text扩展名完全不可信:
mv a.png b.txt后file b.txt仍报 PNG。所以脚本/运维里判断文件类型要用file,别信后缀。
二、看 MIME 类型:-i
bash
file -i document # 输出:document: text/plain; charset=utf-8
file -i img.png # 输出:img.png: image/png; charset=binary
-i(mime)给出 MIME 类型(text/plain、image/png等),写 Web 上传校验、内容协商时常用。
三、批量与软链接
bash
file * # 当前目录所有文件类型
file -L symlink # -L 跟随软链接,报告目标而非链接本身
-L让 file 看软链接指向的真实文件类型(默认报告"symbolic link to xxx")。批量file *一眼看清目录下混着的各路文件。
四、Magic Number 原理
bash
# file 读文件头若干字节,对照 /etc/file/magic 等规则库匹配
head -c 4 weirdfile | xxd # 手动看前 4 字节魔数
file的判断来自"魔数库"——每种格式头部有固定特征字节。这也是为什么它能识破伪装扩展名。理解这点,你就知道它偶尔也会误判罕见格式。
相关命令
一句话总结
file = 探测真实文件类型(不看扩展名,读文件头魔数判断):file -i 给 MIME 类型(Web 校验常用);-L 跟随软链接看真实目标;扩展名可被伪装(mv a.png b.txt 骗不了 file);批量 file * 一眼看清混合目录。原理是匹配 Magic Number(PNG 头 ‰PNG、ELF 头 0x7f ELF)。