file命令,全称为File Type Checker, 它的主要作用是确定一个或多个文件的类型。这个命令的特性是它能够工作在一种"智能"模式下,这就意味着它可以辨认出各种各样的文件,并且不仅仅局限于文本文件。它可以识别和区分目录,二进制文件,文本文件,并且还可以识别出很多种特定文件格式。
file命令在几乎所有的Linux发行版中都可以使用。不过,可能存在某些发行版尚未安装file命令的情况。这时可以通过下面的安装命令进行安装。
对于使用APT工具的Ubuntu或Debian系统,可以输入以下命令安装:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install file
对于使用YUM或DNF工具的CentOS或Fedora系统,可以使用以下命令进行安装:
CentOS 7:
[linux@bashcommandnotfound.cn ~]$ sudo yum install file
CentOS 8:
[linux@bashcommandnotfound.cn ~]$ sudo dnf install file
file命令的基本语法如下:
file [option]... [file]...
你可以使用一个或者多个文件作为参数,file命令会为每一个文件都输出一个描述。
下面是命令的部分选项以及它们的说明:
选项 | 说明 |
---|---|
-b, --brief | 只显示结果,不显示被检查的文件名 |
-c, --checking-printout | 输出解析magic文件时的详细信息 |
-e, --exclude TEST | 不进行TEST类型的测试 |
-F, --separator string | 在文件名和结果之间使用指定字符串作为分隔符 |
-f, --files-from file | 从文件中读取需要检查的文件列表 |
-h, --no-dereference | 不检查符号链接引用的文件 |
-i, --mime | 输出MIME类型 |
-k, --keep-going | 对于文件类型列表,一直检查到最后 |
-n, --no-buffer | 不进行缓冲输出 |
-p, --preserve-date | 保留文件的访问时间 |
-s, --special-files | 同样检查块和字符类型的特殊文件 |
-v, --version | 输出版本信息 |
-z, --uncompress | 尝试查看压缩文件的内容 |
接下来我们将通过一些实例来详细解释file命令的使用。
我们先来创建一份文本文件,然后使用file命令来检查它的类型。
[linux@bashcommandnotfound.cn ~]$ echo "Hello, World" > hello.txt
[linux@bashcommandnotfound.cn ~]$ file hello.txt
运行上述命令后,你将会获得 “hello.txt: ASCII text” 这样的输出,说明file成功地识别出了我们的文本文件。
在默认情况下,file命令会检查符号链接引用的文件。但是我们可以使用-h选项来阻止这个行为。
[linux@bashcommandnotfound.cn ~]$ ln -s hello.txt link_to_hello
[linux@bashcommandnotfound.cn ~]$ file link_to_hello
[linux@bashcommandnotfound.cn ~]$ file -h link_to_hello
在上述命令中,第一个file命令的输出将是 “link_to_hello: symbolic link to hello.txt”,而第二个file命令的输出将是 “link_to_hello: ASCII text”。
使用-i选项,我们可以得到文件的MIME类型。这个类型对于编程开发和网络应用很重要。
[linux@bashcommandnotfound.cn ~]$ file -i hello.txt
上述命令将输出 “hello.txt: text/plain; charset=us-ascii”,明确地告知我们文件的MIME类型和字符集。
如果我们有一个包含了许多文件名的文件,我们可以使用-f选项来让file自动读取文件名和检查它们。
[linux@bashcommandnotfound.cn ~]$ echo hello.txt > files.txt
[linux@bashcommandnotfound.cn ~]$ file -f files.txt
上述命令将输出 “hello.txt: ASCII text”,证明file成功地从文件中读取了文件名并且检查了它们。
file可以自动识别出二进制文件类型,下面我们来看一下怎么检查一个二进制文件。
[linux@bashcommandnotfound.cn ~]$ file /usr/bin/ls
你将得到类似于 “/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV)” 的输出,它告诉你ls是一个64位的可执行二进制文件。
file
命令也可以检查压缩文件。让我们创建一个 gzip 压缩文件,并使用 file
命令检查它的类型。
[linux@bashcommandnotfound.cn ~]$ echo "This is a test." | gzip > test.gz
[linux@bashcommandnotfound.cn ~]$ file test.gz
上述命令将会输出 “test.gz: gzip compressed data”,证明 file
成功地识别出了 gzip 压缩文件。
file
命令可以识别各种常见的图片格式,比如 JPEG、PNG、GIF 等。以下是一个检查 PNG 图片文件的示例:
[linux@bashcommandnotfound.cn ~]$ file picture.png
运行上述命令,你可能会收到 “picture.png: PNG image data, 800 x 600, 8-bit/color RGB, non-interlaced” 这样的输出,由此得知图片的宽度、高度、颜色深度和是否交错。
使用 -e
选项,我们可以排除某些特定类型的检查。例如,我们可以排除符号链接测试:
[linux@bashcommandnotfound.cn ~]$ file -e apptype hello.txt
在以上命令中,file
命令将不会尝试判断 hello.txt
是否是一种应用程序类型。
以下是在操作系统中使用的一些与文件交互的其他命令。