概述
file 命令不依赖于文件扩展名,而是通过分析文件内容来判断其类型。它能识别文本/二进制文件、可执行文件格式 (ELF)、压缩文件、图像/音频等多种格式,并可输出 MIME 类型和编码。
主要特点
- 与扩展名无关,根据实际内容判断
- 可输出 MIME 类型和字符编码
- 可选择判断符号链接目标或链接本身
- 尝试检查压缩文件内部 (-z)
应用场景示例
file 命令特别适用的情况。
- 识别扩展名错误文件的实际格式(例如:伪装成 .jpg 的 PDF)
- 识别无扩展名文件的类型
- 在脚本中根据文件类型进行处理分支
- 在 Web/网络服务中判断上传文件的 MIME 类型
- 判断符号链接本身或其目标
- 分析压缩文件内部内容
- 在安全分析和取证中识别可执行文件格式
主要选项
按场景分组了常用选项。
1) 基本操作与输出控制
2) 输入/目标指定
3) 魔术数据库/排除/调试
4) 帮助/版本
生成的命令:
请尝试组合命令。
描述:
`file` 执行命令。
通过组合这些选项,您可以与 AI 一起虚拟地执行命令。
使用示例
整理了常用模式作为示例。
基本判断
file /bin/ls
以基本格式输出文件类型
不带文件名简洁输出
file -b /bin/ls
方便脚本处理的简洁输出
MIME 类型/编码
file --mime-type index.html && file --mime-encoding README.md
在 Web/管道中判断类型很有用
检查压缩内部
file -z backup.tar.gz
推测压缩文件的实际内容
符号链接本身 vs 目标
file -h symlink && file -L symlink
检查链接本身 (-h),或跟随目标检查 (-L)
结合 find 批量检查 MIME 类型
find . -type f -print0 | xargs -0 file --mime-type
使用 NUL 分隔符安全地传递文件列表
魔术数据库位置
路径可能因系统和发行版而异。
🪄 默认编译的魔术数据库
/usr/share/file/magic.mgc
大多数发行版的默认位置
📁 源魔术目录
/usr/share/file/magic/
编译前的源规则(非 .mgc 原始文件)
退出代码
在脚本中进行分支处理时请参考。
代码 | 含义 |
---|---|
0 | 正常:判断成功(或请求操作成功) |
1 | 一般问题:文件不存在/无法访问/判断失败等 |
2 | 用法错误或系统错误 |
安装
大多数系统默认已安装,如果未安装请使用以下命令。
Debian/Ubuntu
sudo apt update && sudo apt install -y file
RHEL/CentOS/Fedora
sudo dnf install -y file
Arch Linux
sudo pacman -S --needed file
openSUSE
sudo zypper install -y file
提示与注意事项
- 明确使用 `--mime-type` 和 `--mime-encoding` 可以避免因发行版/版本不同而导致的 `-i/--mime` 行为差异。
- 符号链接处理:要查看链接本身,请使用 `-h`;要查看目标文件,请使用 `-L`。
- 批量处理时,使用 `find -print0 | xargs -0` 模式可以安全地处理包含空格/换行的文件名。
- 根据压缩格式的不同,`-z` 可能无法总是检查到内部。如有需要,请先解压缩后再检查。