linux 如何知道它正在处理的文件的类型?

linux 如何知道它正在处理的文件的类型?

在 Windows 中,操作系统通过使用扩展名来了解文件类型:exe、doc、ppt、pdf .... 等

正如我们所知,在 Linux 中扩展是没有用的。

我的问题是 Linux 如何知道它正在处理的文件类型:shell 脚本、音频文件、视频文件...等,或者它是否以相同的方式处理所有文件?

答案1

文件扩展名对于 Linux 发行版来说并非毫无用处,它们只是一个通常不需要的快捷方式。 Linux 使用一些工具使得文件扩展名基本上不再需要。第一个,也许是最明显的,是 shebang ( #!)。

舍邦是 shell 执行的脚本顶部的一行,用于告诉 shell 应使用什么来执行它。例如,bash 脚本要包含的标准行如下所示:

#!/usr/bin/bash

此行告诉 shell 脚本内容应由位于 的实用程序执行/usr/bin/bash。然而,shebang 实际上只对可执行项目有帮助。

现代应用程序广泛使用的下一个工具是 MIME 类型。默剧类型是互联网上广泛使用的文件类型声明,以便网络浏览器和电子邮件客户端可以知道正在传输的文件类型。然而,许多程序依赖这些类型来了解如何处理它们(例如,X 的.desktop文件可能包含 mimetype 行来声明与特定程序的文件类型关联)。

最后,开发了一个 C 库和命令行前端,用于通过启发式方法检测 mimetype。它们分别是libmagicfileLibmagic 和file允许程序或用户检测文件的 mimetype,即使未显式声明也是如此。


诚然,shebang 在现代操作系统确定文件类型方面发挥的作用要小得多,但它们仍然在脚本世界中广泛使用,并且肯定仍然是方程式的一部分。

一些通过 X 的 mimetypes 声明的文件类型关联可以在文件中找到$HOME/.local/share/applications/mimeapps.list(例如)。

答案2

类型

% man file

本质上,大多数文件格式设计者保留前 4 个字符左右来标识格式。

这些字符称为magic number文件的字符。

请记住,与 Windows 或 Mac 不同,Unix 中没有文件关联。

可执行文件由一些内部标志(“x”)标识。

命令

ls -l

向您展示那些标志。

相关内容