Linux常用命令学习笔记:file

1. 命令概述

  • 命令名称file
  • 核心功能:检测文件的类型,通过分析文件的魔数(magic number) 来判断文件格式
  • 主要用途:识别未知文件类型、验证文件格式、调试文件相关问题

2. 语法格式

file [选项] 文件...

3. 常用选项

选项说明
-b简洁模式,不显示文件名
-f从文件中读取要检测的文件名列表
-i输出 MIME 类型字符串
-L直接显示符号链接所指向的文件类型
-z尝试去解读压缩文件的内容
-v显示版本信息
-m指定自定义的魔数文件
-n每检测完一个文件就强制刷新标准输出
-r显示原始输出(不进行转义)
-s读取设备文件或特殊文件
-F使用指定字符串分隔输出中的文件名和类型
-N不填充文件名到固定宽度
--help显示帮助信息

4. 输出格式说明

(1) 默认输出格式

文件名: 文件类型描述

(2) 简洁模式(-b)

文件类型描述

(3) MIME 类型模式(-i)

文件名: MIME类型

5. 常用实例详解

(1) 基本用法:检测单个文件

# 检测文件类型
file example.txt
# 输出示例:example.txt: ASCII text

file image.jpg
# 输出示例:image.jpg: JPEG image data, JFIF standard 1.01

(2) 检测多个文件

# 同时检测多个文件
file file1.txt file2.jpg file3.py
# 输出示例:
# file1.txt: ASCII text
# file2.jpg: JPEG image data, JFIF standard 1.01
# file3.py: Python script, ASCII text executable

(3) 简洁模式(不显示文件名)

# 简洁输出
file -b example.txt
# 输出示例:ASCII text

(4) 输出 MIME 类型

# 显示 MIME 类型
file -i example.txt
# 输出示例:example.txt: text/plain; charset=us-ascii

file -i image.jpg
# 输出示例:image.jpg: image/jpeg; charset=binary

(5) 检测符号链接指向的文件

# 创建符号链接
ln -s example.txt link.txt

# 检测符号链接本身
file link.txt
# 输出示例:link.txt: symbolic link to example.txt

# 检测符号链接指向的文件
file -L link.txt
# 输出示例:link.txt: ASCII text

(6) 从文件读取文件名列表

# 创建包含文件名的列表文件
echo "file1.txt" > filelist.txt
echo "file2.jpg" >> filelist.txt

# 从文件读取并检测
file -f filelist.txt

(7) 检测压缩文件内容

# 检测压缩文件本身
file archive.tar.gz
# 输出示例:archive.tar.gz: gzip compressed data

# 尝试解读压缩文件内容
file -z archive.tar.gz
# 输出示例:archive.tar.gz: gzip compressed data, from Unix, last modified: ...

(8) 检测设备文件

# 检测设备文件
file -s /dev/sda1
# 输出示例:/dev/sda1: Linux rev 1.0 ext4 filesystem data, UUID=...

6. 实际应用场景

场景一:批量检测文件类型

# 检测当前目录下所有文件
file *

# 检测所有 .txt 文件
file *.txt

场景二:脚本中的文件类型判断

# 在脚本中判断文件类型
file_type=$(file -b example.txt)
if [[ $file_type == *"ASCII text"* ]]; then
    echo "这是文本文件"
fi

场景三:验证文件格式是否正确

# 验证图片文件是否为 JPEG 格式
if file -b image.jpg | grep -q "JPEG image data"; then
    echo "JPEG 格式正确"
else
    echo "不是有效的 JPEG 文件"
fi

场景四:检测未知文件

# 检测下载的未知文件
file unknown_file.bin
# 输出示例:unknown_file.bin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=..., stripped

场景五:检测脚本文件

# 检测脚本文件是否可执行
file script.sh
# 输出示例:script.sh: Bourne-Again shell script, ASCII text executable, with very long lines

7. 魔数文件(Magic File)

file 命令通过读取 /etc/magic 文件或 /usr/share/misc/magic.mgc 文件来识别文件类型。这些文件包含了各种文件格式的魔数规则。

自定义魔数文件

# 使用自定义魔数文件
file -m custom.magic example.txt

8. 注意事项

  1. 权限要求:检测设备文件(如 /dev/sda1)需要 root 权限
  2. 压缩文件:使用 -z 选项可以尝试解读压缩文件的内容,但可能不适用于所有压缩格式
  3. 二进制文件:对于二进制可执行文件,file 可以识别其架构、链接方式等信息
  4. 符号链接:默认检测符号链接本身,使用 -L 检测指向的文件
  5. 大文件:对于非常大的文件,file 只会读取文件开头的部分字节来判断类型

核心要点总结

  • file 命令通过分析文件的魔数来识别文件类型
  • 常用选项-b(简洁模式)、-i(MIME 类型)、-L(符号链接指向)
  • 主要用途:识别未知文件、验证文件格式、脚本中的文件类型判断
  • 可以识别文本文件、二进制文件、压缩文件、设备文件等多种格式
  • 在系统管理、文件处理、脚本编写中非常实用

作 者:南烛
链 接:https://www.itnotes.top/archives/223
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇