为什么我的脚本文件可以在虚拟机上执行?

为什么我的脚本文件可以在虚拟机上执行?

我在 Windows 的虚拟机上安装了 ubuntu。当我运行脚本时,我只需./blabla.sh在终端中输入 sudo 即可运行它。

然后我直接在笔记本电脑上从相同的 iso 文件安装了 ubuntu,所以它不是虚拟机。

当我运行相同的脚本: sudo 时./blabla.sh,它说找不到命令。然后,如果我chmod +x blabla.sh这样做,我就可以运行它。

为何两者会有这样的差异呢?

答案1

sudo需要至少设置一个执行位才能执行文件,即您需要为(至少)用户或组或其他人设置执行位。如果没有设置执行位,则无法以 的身份执行文件sudo ./script

这个例子会让你清楚:

$ ls -l test_scr 
-rw-rw-r-- 1 user user 30 May  4 03:50 test_scr

$ sudo ./test_scr
sudo: ./test_scr: command not found

$ ./test_scr
bash: ./test_scr: Permission denied

$ chmod u+x test_scr 

$ sudo ./test_scr
Hello world

$ ./test_scr
Hello world

还要注意,您不需要使该文件可执行,您可以将该文件作为 shell 二进制文件的参数来执行它:

$ bash test_scr 
Hello world

$ sudo bash test_scr 
Hello world

相关内容