做什么

通过查看**文件内容的魔数(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 看头部魔数