在任何其他Linux发行版上,我可以使用shebang创建一个文件并运行shell脚本,如下所示:
$ chmod +x test.sh
$ ./test.sh Johnny
hello Johnny
但是在Google Cloud Platform容器优化操作系统上,我得到-bash: ./test.sh: Permission denied
如果我使用sh
加前缀,例如sh test.sh Johnny
它会奏效。我怎样才能让它正常工作?
$ cat test.sh
#!/usr/bin/env sh
echo "Hello $@"
matt@rancher-4mmm /tmp/matt $ chmod +x test.sh
matt@rancher-4mmm /tmp/matt $ sh ./test.sh matt
Hello matt
matt@rancher-4mmm /tmp/matt $ ./test.sh matt
-bash: ./test.sh: Permission denied
matt@rancher-4mmm /tmp/matt $ ls -la
total 4
drwxr-xr-x 2 matt matt 60 Feb 28 20:00 .
drwxrwxrwt 14 root root 280 Feb 28 19:59 ..
-rwxr-xr-x 1 matt matt 35 Feb 28 20:00 test.sh
答案 0 :(得分:5)
COS节点上的大多数文件系统都安装了“noexec”标志,因此您无法从它们执行二进制文件。
一些解决方法:
答案 1 :(得分:4)
容器优化的操作系统使用“noexec”标志安装文件系统,除了“在可写位置中,只有/ var / lib / docker和/ var / lib / cloud安装为”可执行文件“(即没有noexec安装)旗)。” [1]。您可以使用以下命令进行验证:
mount | grep noexec
有关容器优化操作系统(COS)文件系统布局的更多信息,请参阅documentation。 'noexec'选项不允许在挂载的文件系统上直接执行任何二进制文件。这是因为COS上的默认安全锁定实现。
答案 2 :(得分:1)
如果您要一次性运行二进制文件,又不想处理另一个PD,也可以只安装一个tmpfs设备并从那里运行它。
getListView().setBackgroundColor(ContextCompat.getColor(this , R.color.colorBackground));
答案 3 :(得分:1)
一种解决方案是使用另一个图像系列,例如var file = 'c:\\\\Users\\SOM\\form.xlsx';
。
在那里,ubuntu
没有挂载 /tmp/
。