Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 虚拟化

  • Git

  • 可视化

  • Linux

    • Linux 系统中常见目录符号
    • nohub启动jar并保存日志到文件
    • Linux添加SSH公钥
    • ssh命令常用场景详解
    • lvm是什么,和文件系统什么关系,windows下有吗
    • linux查询某个文件夹大小
    • linux删除某个文件夹
    • linux根目录下的文件夹解析
    • linux的文件权限解析
    • dev-null是什么
    • 2&1是什么意思
    • .ssh下有哪些文件,分别有什么作用
    • known_hosts具体举例说明
    • 非对称加密原理和真实数据举例
    • 查询linux端口是否占用
    • 若 SELinux 处于 Enforcing 模式,需在挂载路径后添加 Z是什么意思
    • linux查看每个进程内存大小
    • 分辨文件的种类
    • 远程串流等

    • SWF

    • 网络

    • 网站收藏
    • 技术
    • Linux
    plantre
    2025-05-26
    目录

    分辨文件的种类

    file 命令是 Linux/Unix 系统中用于快速检测文件类型的核心工具,其功能远不止简单判断文本或二进制文件。以下从基础到进阶的全面解析,涵盖实际场景中的高频用法、深度原理及实用技巧。


    # 一、命令核心功能

    1. 不依赖扩展名 直接分析文件内容(魔数、结构、编码等),避免因扩展名错误导致误判。
    2. 多维度检测 支持文本、二进制、压缩包、设备文件、脚本、动态库等多种类型识别。
    3. 编码与格式推断 可检测 ASCII、Unicode(UTF-8/16)、ISO 编码,甚至文件子类型(如 PNG 图片版本)。

    # 二、基础语法与高频选项

    # 语法

    file [选项] 文件1 文件2 ...  # 支持同时检测多个文件
    
    1

    # 高频选项速查表

    选项 作用 典型场景
    -b 省略文件名(仅输出类型) 脚本中自动化处理
    -i 输出 MIME 类型(如 text/plain) HTTP 头、编程接口
    -L 解析符号链接的实际文件 排查软链接指向问题
    -s 读取块设备/特殊文件 检测磁盘分区类型(如 /dev/sda1)
    -z 解析压缩文件内部内容 查看压缩包内文件类型
    -k 显示所有匹配类型(不停止在首个匹配) 复杂文件多重类型检测
    -F "分隔符" 自定义文件名与类型的分隔符 格式化输出(如 CSV)
    -m magic文件 指定自定义魔数规则文件 扩展检测能力

    # 三、经典使用场景与示例

    # 1. 基本文件检测

    file example.txt
    # 输出:example.txt: UTF-8 Unicode text
    
    1
    2

    # 2. 批量检测并过滤特定类型

    file * | grep "ELF"  # 查找所有可执行文件
    
    1

    # 3. 检测设备文件(如磁盘分区)

    sudo file -s /dev/sda1
    # 输出:/dev/sda1: DOS/MBR boot sector
    
    1
    2

    # 4. 解析压缩文件内部结构

    file -z backup.tar.gz
    # 输出:backup.tar.gz: gzip compressed data, from Unix, last modified: ...
    
    1
    2

    # 5. 检测文件编码(尤其处理乱码文件)

    file -i unknown_file
    # 输出:unknown_file: text/plain; charset=iso-8859-1
    
    1
    2

    # 6. 结合 find 深度扫描

    find ~/ -type f -exec file {} + | grep "script"  # 找出所有脚本文件
    
    1

    # 四、进阶技巧与深度解析

    # 1. 魔数(Magic Numbers)机制

    • 原理:文件头部特定字节标识类型(如 ELF、PNG)。

    查看默认规则

    :

    less /etc/magic  # 系统级规则
    less /usr/share/misc/magic.mgc  # 多数 Linux 的默认规则库
    
    1
    2

    # 2. 自定义魔数规则

    步骤

    :

    ① 创建自定义规则文件(如

    my_magic
    
    1

    )

    ② 编写规则(示例检测自定义文件类型):

    # 检测文件头为 "MYFILE" 的文件
    0 string MYFILE My Custom File
    
    1
    2

    ③ 使用自定义规则检测:

    file -m my_magic custom_file
    
    1

    # 3. 处理嵌套压缩文件

    file -z -z nested.tar.gz  # 多次使用 -z 解析多层压缩
    
    1

    # 4. 检测损坏文件

    • 若文件头损坏,输出可能为

      data
      
      1

      或

      corrupted
      
      1

      :

      file broken.zip
      # 输出:broken.zip: data
      
      1
      2

    # 5. 结合脚本自动化处理

    # 判断文件是否为 JPEG 图片
    if file -b --mime-type image.jpg | grep -q "image/jpeg"; then
      echo "Valid JPEG file."
    fi
    
    1
    2
    3
    4

    # 五、常见问题与解决方案

    # 1. 为何空文件检测结果为 empty?

    • 文件大小为 0 字节,无内容可分析。

      touch empty_file && file empty_file
      # 输出:empty_file: empty
      
      1
      2

    # 2. 检测动态库的架构信息

    file /lib/x86_64-linux-gnu/libc.so.6
    # 输出:ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux) ...
    
    1
    2

    # 3. 处理无扩展名文件

    file -b unknown_data  # 依赖内容分析,无需扩展名
    
    1

    # 4. 检测 Windows 文件换行符

    file -k windows.txt
    # 输出:ASCII text, with CRLF line terminators
    
    1
    2

    # 六、性能优化与注意事项

    1. 大文件检测速度 file 默认只读取文件头部,即使处理大文件也较快。
    2. 避免误判 高度混淆的文件(如加密数据)可能返回 data,需结合其他工具(如 binwalk)深入分析。
    3. 版本差异 不同系统的 file 版本可能检测精度不同,建议更新至最新版。

    通过掌握 file 命令的灵活用法,您可以快速解决文件类型识别、编码转换、数据恢复等问题,尤其适用于服务器运维、安全分析、数据取证等专业场景。

    编辑 (opens new window)
    上次更新: 2025/06/10, 09:18:05
    linux查看每个进程内存大小
    RDP

    ← linux查看每个进程内存大小 RDP→

    最近更新
    01
    集成loki
    07-04
    02
    TCP的ESTABLISHED是什么意思
    06-24
    03
    安装1panel
    06-24
    更多文章>
    Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式