Linux 上存在哪些类型的可执行文件?

Linux 上存在哪些类型的可执行文件?

例如,如果我这样做

[OP@localhost executable]$ cat garbage 
lalala
trololol
[OP@localhost executable]$ chmod +x garbage
[OP@localhost executable]$ ./garbage 
./garbage: line 1: lalala: command not found
./garbage: line 2: trololol: command not found

Bash 似乎试图将这个“可执行文件”解释为脚本。但是,有两种情况显然不会发生这种情况:当文件以#!, 和 ELF 文件开头时。还有吗?某处有这方面的综合文档吗?

答案1

扩展于我之前对另一个答案的评论, 内核包含七个二进制加载器(查找以binfmt_There 开头的文件,或阅读具体binfmtKconfig):

这些决定了内核可以执行的可执行文件的类型。binfmt_misc特别是允许内核处理许多其他二进制文件(至少从调用进程的角度来看)exec功能之一)。

然而,这并没有涵盖全部内容,因为 C 库和 shell 本身也涉及其中。 POSIX 现在要求execlpexecvp函数,当遇到内核无法运行的可执行文件时,尝试使用 shell 运行它;看这里的理由了解详情。

所有这些交互以提供您所看到的行为的方式在当我在 shell 中执行文件时到底会发生什么?哪个 shell 解释器运行不带 shebang 的脚本?

相关内容