为什么我们需要执行权限,虽然我们可以运行任何脚本而不使用“bash脚本文件”?

时间:2016-11-10 18:40:25

标签: linux bash shell command-line

我想知道我们何时以及为什么我们需要linux中的执行权限,虽然我们可以在使用下面的语法执行该脚本时运行任何没有执行权限的脚本?

bash SomeScriptFile

2 个答案:

答案 0 :(得分:2)

并非所有程序都是脚本 - bash例如isn&t; t。因此,您需要执行程序的执行权限。

此外,当您说bash SomeScriptFile时,脚本必须位于当前目录中。如果您的脚本可执行并且在PATH的目录中(例如$HOME/bin),那么您可以运行该脚本而不必对bash $HOME/bin/SomeScriptFile(或bash ~/bin/SomeScriptFile)进行不必要的限制;你可以简单地运行SomeScriptFile。这种经济是值得拥有的。

当然,对目录的执行权限有些不同,但也很重要。它允许用户类#39; (所有者,组,其他人)访问目录中的文件,但也允许使用每个文件的权限。

答案 1 :(得分:1)

通过直接调用脚本并通过bash运行脚本来执行脚本是两回事。

当你运行bash ~/bin/SomeScriptFile时,你实际上只是执行bash - 一个命令解释器。 bash依次加载脚本并运行它。

当您直接运行~/bin/SomeSCriptFile时,系统可以告诉该文件是脚本文件并找到解释器来运行它。在第一行有一个很大的魔法调用#!来寻找合适的翻译。

我们直接运行脚本的原因是用户(和系统)无法知道或关心我们正在运行的命令是脚本还是已编译的可执行文件。

例如,如果我编写一个名为fixAllIlls的漂亮shell脚本,稍后我决定在C中重写它,只要我保持相同的界面,用户就没有做任何不同的事情。

对他们来说,这只是一个可以运行的程序。

修改

操作系统首先检查权限有几个原因:

  • 检查权限更快
  • 在旧时代,您可以拥有SUID脚本,因此需要检查权限位。
  • 因此,可以运行您无法实际读取内容的脚本。 (二进制文件仍然如此。)