做什么
通过查看**文件内容的魔数(magic number)**判断文件类型——比看扩展名靠谱。
实战
file hello.txt
# hello.txt: ASCII text
file image.png
# image.png: PNG image data, 800 x 600, 8-bit/color RGB
file unknown.dat
# unknown.dat: data
file /bin/ls
# /bin/ls: ELF 64-bit LSB pie executable, x86-64, ...
file backup.tar.gz
# backup.tar.gz: gzip compressed data, from Unix
常用参数
| 参数 | 含义 |
|---|---|
-b |
不显示文件名(只显示类型,脚本里有用) |
-i |
显示 MIME 类型 |
-L |
跟随软链接 |
-z |
看压缩文件里面的类型 |
实战 2
# 拿 MIME 类型
file -i image.png
# image.png: image/png; charset=binary
# 脚本里判断是不是图片
if [[ "$(file -b --mime-type "$f")" == image/* ]]; then
echo "$f 是图片"
fi
# 批量检查目录里的文件类型
file *
坑
- file 是启发式——多数情况准,但伪装 / 损坏的文件可能错判
- 文件扩展名 ≠ 真实类型——
.txt可能是任何东西 - 二进制看更具体:
hexdump -C file | head看头部魔数