bash 如何使文件可执行?

Dry*_*bel 0 bash kernel chmod

我知道当我运行命令时

chmod +x filename

bash 将使我的文件成为可执行文件。将文件的体系结构更改为可执行文件究竟会发生什么?即内核如何知道这个文件是可执行的?

只是想锻炼我的书呆子肌肉。

use*_*686 6

文件的“架构”不会改变——确保它具有正确的格式取决于您。也就是说,该文件已经需要是一个有效的 ELF 二进制文件,或者一个带有有效#!头文件的脚本,或者你的特定内核可以识别的其他东西(比如 a.out 或 MZ/PE)。

什么chmod不只是设置一个位文件的权限,告诉用户是在内核允许执行此文件。它可以作为一个小的安全屏障,以及防止某些类型的事故。(请注意,+x这里是 的简写ugo+x;它就像读/写一样是一个权限位。)

如果在内核无法识别的文件上设置 +x,它只会从exec系统调用返回错误代码。(请注意,某些 shell 对此有特殊处理——如果内核报告“无法识别的格式”,则 shell 将尝试在内部将文件解释为脚本,因为这#!就是发明之前 shellscript 的工作方式。)