即使以 root 身份也无法执行 bash 脚本?

Posted

技术标签:

【中文标题】即使以 root 身份也无法执行 bash 脚本?【英文标题】:Unable to execute bash scripts even as root? 【发布时间】:2011-12-27 01:42:22 【问题描述】:

我有一个奇怪的问题,我无法执行 bash 脚本,即使是这样的基本脚本:

#!/bin/bash
echo "me"

我将它保存为 test.sh 然后执行 chmod 755 test.sh 并运行 ./test.sh 得到:

bash: ./test.sh: Permission denied

有什么可能导致这种情况的想法吗?

【问题讨论】:

你是在一个挂载noexec的文件系统中写的吗? 【参考方案1】:

如果您使用“noexec”选项挂载文件系统,就会发生这种情况。你应该删除它。

【讨论】:

另外,要快速了解您的文件系统是否已使用 'noexec' 选项挂载,请使用:mount 要删除 'noexec' 选项,只需将其从选项列表中删除以下文件中的文件系统:/etc/fstab。或者add 'exec' 选项到选项的末尾。 user 选项也可能导致此问题。删除它允许我执行有问题的二进制文件。 Ubuntu 中的另一个可能原因可能是默认的文件管理器行为。转到filemanager->edit->prefferences->behavior 并检查execute on double click【参考方案2】:

脚本需要是可执行的。使用这个:

chmod +x <script-name>

【讨论】:

这是为我做的+1 这重复了几年前的另一个答案。这可能是一个常见的初学者问题,但这个答案的这个特定实例不应该比原来的得到更多的支持,特别是因为问题已经提到原来的 OP 已经确保权限是正确的。【参考方案3】:

试试

ls -la

查看文件的实际权利和所有权。看看 chmod 命令是否真的有效。您可能希望更改所有权以及文件检查的模式:http://www.tuxfiles.org/linuxhelp/fileowner.html

【讨论】:

【参考方案4】:

虽然与这个特定线程没有直接关系;如果文件来自 Windows 系统,则行尾可能有 CR/LF。这会影响文件中的所有行,包括初始执行行,并且在您查看文件时将不可见。

$ ./test.sh 
-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory

要看到这个,你可以 cat -A 文件: $ cat -A ./test.sh #!/bin/bash^M$ 回声“我”^M$

要删除,请使用 dos2unix。

【讨论】:

【参考方案5】:

使用chmod +x ./test.sh 这应该允许您运行它。

【讨论】:

不错的主意,但 OP 已经注意到 chmod 755 不起作用。【参考方案6】:

另外,检查包含脚本的目录/文件系统是否已安装在 nfs 上。 root 不会从安装了 nfs 的位置运行脚本。

【讨论】:

你能解释一下吗??【参考方案7】:

在 macOS 中,如果存在 com.apple.quarantine 标志,则可能会发生这种情况。如果在脚本路径上运行ls -l后看到权限上有@后缀,执行ls -l@ *script_path*确认。然后运行xattred -d com.apple.quarantine *script_path* 删除隔离标志。

【讨论】:

【参考方案8】:

当你在该文件的目录中时,你需要使用./test.sh,如果你没有,试试PATH TO THE SCRIPT。或者你可以将它复制到/data的某个目录并chmod它为shell,然后做上面陡峭。如果你仍然失败,没关系,因为我有同样的问题,我只是成功了一次。

【讨论】:

Op 得到了“权限被拒绝”,而不是路径访问问题 如果你是 root 用户并且仍然有这个问题,所以你的 shell 坏了。我知道因为我无法执行 sh shell 的许多命令(类似于 bash),即使我以 root 身份尝试它说权限被拒绝,我无法更改权限。然后我尝试将它们复制到/data 中的目录,更改权限,我可以再次使用命令。但是当我尝试执行脚本时,它不是这样的文件或目录。 那么您可能遇到了noexec 问题,这里的其他几个答案中对此进行了解释。【参考方案9】:

对于默认使用noexec 挂载的文件系统,例如NFS,显式添加exec 在末尾​​strong> 会有所帮助,即使列表中前面提供的选项默认暗示noexec以及,例如user 选项。

因此,如果您有以下选项之一:

noexec user

将它们更改为:

execuser,exec

exec 放在最后很重要。在某些情况下,仅删除 noexec 可能会有所帮助,但如果您之前使用过 user 等其他选项,则并非完全如此。

【讨论】:

以上是关于即使以 root 身份也无法执行 bash 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

以root身份在脚本中间运行命令[重复]

如何以用户而不是 root 用户身份运行 cron 作业 [关闭]

如何检查是不是在 bash 脚本中以 root 身份运行

在 bash 脚本中运行 php:错误“无法打开输入文件”

sh 确保以root身份执行脚本

简化bash脚本,以sudo身份运行时从命令中提取第一个单词