在 Windows 中,操作系统通过使用扩展名来了解文件类型:exe、doc、ppt、pdf .... 等
在 Linux 中,我们知道扩展是无用的。
我的问题是 Linux 如何知道它正在处理的文件类型:shell 脚本、音频文件、视频文件……等等,或者它是否以相同的方式处理所有文件?
文件扩展名对于 Linux 发行版并非无用,它们只是通常不需要的快捷方式。Linux 使用了一些工具,它们使文件扩展名在很大程度上是不需要的。第一个,也许是最明显的,是shebang ( #!)。
该家当是由外壳执行告诉应该用什么来执行它的shell脚本的顶线。例如,要包含在 bash 脚本中的标准行是这样的:
#!/usr/bin/bash
Run Code Online (Sandbox Code Playgroud)
这一行告诉 shell 脚本内容应该由位于 的实用程序执行/usr/bin/bash。然而,shebangs 实际上只对可执行项目有帮助。
现代应用程序广泛使用的下一个工具是 MIME 类型。Mime 类型是 Internet 上广泛使用的文件类型声明,以便 Web 浏览器和电子邮件客户端可以知道正在传输的文件类型。然而,许多程序依赖于这些类型来知道如何处理它们(例如,X 的.desktop文件可能包含一个 mimetype 行来声明与特定程序的文件类型关联)。
最后,开发了一个 C 库和命令行前端来通过启发式检测 mimetypes。它们分别是libmagic和file。Libmagic 并file允许程序或用户检测文件的 mimetype,即使它没有明确声明。
诚然,shebangs 在现代操作系统如何确定文件类型方面发挥的作用要小得多,但它们仍然广泛用于脚本世界,当然仍然是等式的一部分。
一些通过 X 的 mimetypes 声明的文件类型关联可以在文件中找到$HOME/.local/share/applications/mimeapps.list(例如)。