在上一课中,你使用 touch 创建了一个没有扩展名的文件。Linux 文件名不必说明文件中有什么:名为 funny.gif 的文件未必真是 GIF 图片。
要了解一个文件的类型,可以使用 file 命令。它会显示文件内容的描述。
$ file banana.jpg
banana.jpg: JPEG image data
命令行 · 第 6 课
学习在不依赖文件名或扩展名的情况下识别文件可能包含的内容类型。
在上一课中,你使用 touch 创建了一个没有扩展名的文件。Linux 文件名不必说明文件中有什么:名为 funny.gif 的文件未必真是 GIF 图片。
要了解一个文件的类型,可以使用 file 命令。它会显示文件内容的描述。
$ file banana.jpg
banana.jpg: JPEG image data
Linux 工具通常不要求用扩展名判断文件类型。一个 shell 脚本可以命名为 backup,文本文件可以叫 README,图片也可能带有误导性的扩展名。file 会检查文件系统元数据和内容中可识别的模式等属性。
$ file README
README: ASCII text
$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable
它给出的是分类结果,而非绝对保证。少见、不完整或已损坏的文件可能只得到 data 这样的宽泛描述。
名为 report.jpg 的文件未必包含图片。哪个命令可以检查它可能的内容类型?
你可以一次检查多个文件:
$ file notes.txt image.png archive.tar.gz
notes.txt: ASCII text
image.png: PNG image data
archive.tar.gz: gzip compressed data
也可以传入 shell 通配符。shell 会先把 * 展开为匹配的名称,再由 file 逐个检查:
$ file *
哪个命令会让 file 检查当前目录中 * 匹配到的每个非隐藏名称?
-i 选项会打印 MIME 风格的信息,包括媒体类型,并在可用时给出字符集。当其他程序需要 text/html 之类的值时,这种形式很有用。
$ file -i index.html
index.html: text/html; charset=us-ascii
哪个命令会报告 index.html 的 MIME 风格信息?
-i:显示 MIME 类型信息。-b:简洁模式,输出时省略文件名。-L:跟随符号链接。-z:尝试检查压缩文件。例如:
$ file -b notes.txt
ASCII text
哪个命令会对 notes.txt 分类,但在输出中省略文件名?
课程已完成
现在,你可以使用 file 调查文件可能包含的内容。
不依赖扩展名对文件分类。
用一个命令检查多个路径名。
请求 MIME 风格信息。
调整链接、压缩数据和输出标签的处理方式。