![为什么我的脚本文件可以在虚拟机上执行?](https://linux22.com/image/1126151/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E8%84%9A%E6%9C%AC%E6%96%87%E4%BB%B6%E5%8F%AF%E4%BB%A5%E5%9C%A8%E8%99%9A%E6%8B%9F%E6%9C%BA%E4%B8%8A%E6%89%A7%E8%A1%8C%EF%BC%9F.png)
我在 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