即使以 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
将它们更改为:
exec
或
user,exec
将exec
放在最后很重要。在某些情况下,仅删除 noexec
可能会有所帮助,但如果您之前使用过 user
等其他选项,则并非完全如此。
【讨论】:
以上是关于即使以 root 身份也无法执行 bash 脚本?的主要内容,如果未能解决你的问题,请参考以下文章