file命令通过读取文件头魔数识别真实类型,不依赖扩展名;如pdf重命名为.txt,file -i仍返回application/pdf;-b --mime-type可提取纯净mime类型,-z可穿透压缩包识别内部文件。

在麒麟系统中准确识别文件真实类型,不能只看后缀名,必须用命令读取文件头魔数来判断——比如把一个PDF重命名为“报告.txt”,图形界面会误当文本打开,而命令行能立刻识破它是application/pdf。
用file命令查看MIME类型(推荐日常使用)
打开终端(Ctrl+Alt+T),输入:
file -i 文件名
这一步操作起来很简单,直接把文件拖进终端窗口补全路径即可。输出形如“report.pdf: application/pdf; charset=binary”,其中分号前就是真正的MIME类型。
【注意:-i参数等价于--mime-type --mime-encoding,会同时带出编码信息;若只要干净的类型字符串(如脚本中传给curl),必须改用file --mime-type -b 文件名】
用file命令分离获取纯类型或纯编码
方法一:只取MIME类型(不含charset)
file --mime-type -b 文件名
方法二:只取字符编码(对文本文件有效)
file --mime-encoding -b 文件名
方法三:批量查当前目录所有文件(含隐藏文件)
find . -maxdepth 1 -type f -exec file --mime-type -b {} \;
这一步容易漏掉.env、.gitignore这类点开头的文件,用*通配符会跳过它们,find是最稳妥的选择。
用xdg-mime查询已注册的MIME类型(查关联而非内容)
第一步:先确认文件扩展名对应哪个MIME类型
xdg-mime query filetype 文件名
第二步:再查该MIME类型当前绑定的默认程序
xdg-mime query default $(xdg-mime query filetype 文件名)
这个命令不分析文件内容,而是查XDG数据库里“这个扩展名被系统登记为什么类型”,结果可能和file -i不一致——比如一个无后缀的shell脚本,xdg-mime可能返回text/plain,而file -i会精准识别为text/x-shellscript。
特殊场景排查:识别压缩包内部文件类型
普通file -i只能告诉你archive.zip是application/zip,但看不到里面的内容。
加-z参数才能穿透一层:
file -z --mime-type archive.zip
如果返回text/x-python,说明压缩包里第一个文件是Python脚本;如果返回data,可能是加密、损坏,或file规则库没覆盖该格式。
【-z对.tar.gz、.bz2、.xz、.zip均有效,但对7z或rar需额外安装libfile-libmagic-perl等支持包】
验证符号链接指向的真实类型
默认情况下file会跟随符号链接去检查目标文件,这是多数人想要的行为。
但如果你怀疑链接本身已损坏或指向非法路径,需要确认链接元数据:
file -h --mime-type 链接名
输出inode/symlink即表示它只是个链接,而非真实内容。此时再用file --mime-type 链接名,才会真正读取目标文件。











