Linux file命令介绍
file命令的全称是file type determination,它可以根据文件的内容和结构来显示文件的类型。它有三种测试方法:文件系统测试、魔法测试和语言测试。文件系统测试是基于stat系统调用的返回值来判断文件是否为空或是否是某种特殊文件。魔法测试是根据文件中固定位置的特定数据来识别文件的格式。语言测试是搜索文件中前几块数据中出现的特定字符串。file命令可以处理一种或多种文件名作为参数,也可以处理标准输入。
适用的Linux版本
file命令在大多数Linux发行版中都是可用的,它是GNU核心工具包的一部分。如果你的系统中没有安装file命令,你可以使用以下命令来安装它:
- 在基于Debian的系统中(如Ubuntu),使用
apt-get install file
。 - 在基于Red Hat的系统中(如CentOS),使用
yum install file
。 - 在基于Arch Linux的系统中(如Manjaro),使用
pacman -S file
。
Linux file命令的基本用法
file命令的语法格式如下:
file [选项] [文件]
它可以接受一个或多个文件名作为参数,也可以使用通配符来匹配多个文件。如果要测试标准输入,可以使用-
作为一个文件名参数。
Linux file命令的常用选项说明
file命令有很多选项,可以用来控制输出格式、指定魔法文件、排除某些测试等。这里列出一些最常用的选项:
选项 | 说明 |
---|---|
-b, --brief | 只显示文件类型,不显示文件名 |
-c, --checking-printout | 显示魔法文件的解析结果,通常和-m选项一起使用 |
-e, --exclude | 排除某个测试,可以是apptype, ascii, cdf, compress, elf, encoding, soft, tar, text, tokens |
-f, --files-from | 从中读取要检测的文件名(每行一个),在参数列表之前 |
-F, --separator | 指定文件名和文件类型之间的分隔符,默认是: |
-i, --mime | 显示MIME类型而不是人类可读类型 |
-k, --keep-going | 不停止在第一个匹配,继续进行所有测试 |
-m, --magic-file | 指定要使用的魔法文件或目录,是以逗号分隔的路径名 |
-N, --no-pad | 不对齐输出中的文件名 |
-s, --special-files | 也检测块和字符设备 |
-z, --uncompress | 尝试查看压缩文件内部的类型 |
Linux file命令的实例
下面给出一些file命令的实例,展示它如何检测不同类型的文件。
检测文本文件
[linux@bashcommandnotfound.cn ~]$ file hello.txt
hello.txt: ASCII text
这个例子显示了一个普通的文本文件,它只包含ASCII字符。
检测二进制可执行文件
[linux@bashcommandnotfound.cn ~]$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=f8a6c8c4f9a9e3d7b5e6c0a5c8d4f7f0a9b3b1d1, stripped
这个例子显示了一个二进制可执行文件,它是ELF格式的,适用于x86-64架构的Linux系统。
检测压缩文件
[linux@bashcommandnotfound.cn ~]$ file archive.zip
archive.zip: Zip archive data, at least v2.0 to extract
这个例子显示了一个Zip压缩文件,它至少需要v2.0的解压工具来解压。
检测图片文件
[linux@bashcommandnotfound.cn ~]$ file image.jpg
image.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72x72, segment length 16, Exif Standard: [TIFF image data, big-endian, direntries=10, manufacturer=Canon, model=Canon EOS 5D Mark IV, orientation=upper-left, xresolution=98, yresolution=106, resolutionunit=2, software=Adobe Photoshop Lightroom Classic 9.4 (Windows), datetime=2020:08:31 15:25:04], baseline, precision 8, 5760x3840, frames 3
这个例子显示了一个JPEG图片文件,它包含了一些元数据,如分辨率、制造商、模型、软件等。
检测标准输入
[linux@bashcommandnotfound.cn ~]$ echo "Hello world" | file -
/dev/stdin: ASCII text
这个例子显示了如何使用-
来检测标准输入,它也是一个文本文件。
Linux file命令的注意事项
使用file命令时,有一些注意事项:
- file命令只能根据文件的内容和结构来判断文件类型,它不能保证文件的完整性或正确性。例如,一个损坏的图片文件可能仍然被识别为图片文件,但是无法正常打开或显示。
- file命令依赖于魔法文件来进行魔法测试,如果魔法文件不完整或不正确,file命令可能无法识别某些文件类型。你可以使用-m选项来指定自定义的魔法文件或目录,也可以使用-c选项来检查魔法文件的格式是否正确。
- file命令不能识别加密或混淆的文件,它会将它们视为数据文件或未知类型。你需要使用适当的工具来解密或反混淆这些文件,才能查看它们的真实类型。
评论区