为什么我需要设置执行权限来运行 bash 脚本,而只要我使用“bash test.sh”强制它就可以运行?

为什么我需要设置执行权限来运行 bash 脚本,而只要我使用“bash test.sh”强制它就可以运行?

这些是的内容test.sh

#!/bin/bash
echo "test me"

执行bash test.sh,没有问题。但是执行./test.sh,出现错误:

bash: ./test.sh: Permission denied

chmod u+x test.sh可以使其运行./test.sh

我想知道原因:为什么不需要添加chmod u+x test.sh何时执行它bash test.sh

为什么需要添加chmod u+x test.sh何时执行./test.sh

答案1

当您使用 运行它时,bash test.sh您明确告诉 bash 加载并运行test.sh。只需通过该方法读取文件即可“运行”。但是,如果您只是使用 运行文件,./test.sh它将不会运行,因为该文件没有明确的执行权限;只有读取权限。

意思是,在第一种情况下,test.sh是由 加载的bash。但是,Unix/Linux 系统本身默认不会运行文件。除此之外,如果您删除该初始文件#!/bin/bash./test.sh尝试运行它,即使具有执行权限,它也不会运行,因为系统不知道如何处理其下的命令。

如果您想知道为什么文件在创建时不会自动获得执行权限?好吧,这是一个很长的话题,但基本上这样做会给您的系统带来新的攻击面。如果有人可以进入您的系统并通过写入文件来执行文件,那将是一个非常大的问题。

答案2

与 DOS 和 Windows 等受 CP/M 启发的操作系统不同,Unix 不使用文件名来指示哪些文件是可执行的。

如果你想使用操作系统调用'执行vpe()' 或者通过在命令行上命名它需要具有执行权限

只要它设置了执行位,您就可以随意调用它,例如:trump.giffoo-script(但test不是一个很好的示例名称,因为已经有一个同名的命令)

相关内容