这些是的内容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.gif
或foo-script
(但test
不是一个很好的示例名称,因为已经有一个同名的命令)