我的主文件夹中有一个名为foo.sh
的脚本.
当我导航到此文件夹并输入./foo.sh
时,我得到
-bash: ./foo.sh: Permission denied
当我使用sudo ./foo.sh
时,我得到
sudo: foo.sh: command not found
为什么会发生这种情况,我该如何解决?
我的主文件夹中有一个名为foo.sh
的脚本.
当我导航到此文件夹并输入./foo.sh
时,我得到
-bash: ./foo.sh: Permission denied
当我使用sudo ./foo.sh
时,我得到
sudo: foo.sh: command not found
为什么会发生这种情况,我该如何解决?
Permission denied
为了运行脚本,文件必须有an executable permission bit set个字符.
为了完全理解Linux file permissions,您可以学习chmod
命令的文档.chmod是change mode的缩写,是用于更改文件权限设置的命令.
要阅读本地系统的chmod文档,请从命令行运行man chmod
或info chmod
.一旦阅读和理解,你应该能够理解运行的输出...
ls -l foo.sh
... 它将列出文件所有者、组所有者以及所有其他非文件所有者或文件所属组成员(最后一个权限组有时称为"世界"或"其他")的读取、写入和执行权限
以下是如何在您的 case 中排除Permission Denied error个故障的摘要.
$ ls -l foo.sh # Check file permissions of foo
-rw-r--r-- 1 rkielty users 0 2012-10-21 14:47 foo.sh
^^^
^^^ | ^^^ ^^^^^^^ ^^^^^
| | | | |
Owner| World | |
| | Name of
Group | Group
Name of
Owner
所有者具有读写权限rw,但-表示缺少可执行权限
chmod
命令解决了这个问题.(组和其他组仅对文件设置了读取权限,不能写入或执行该文件)
$ chmod +x foo.sh # The owner can set the executable permission on foo.sh
$ ls -l foo.sh # Now we see an x after the rw
-rwxr-xr-x 1 rkielty users 0 2012-10-21 14:47 foo.sh
^ ^ ^
福.就Linux而言,sh现在是可执行的.
Using sudo results in Command not found
使用sudo运行命令时,实际上是以超级用户或root用户的身份运行它.
root用户找不到您的命令的原因可能是root的PATH
环境变量不包括directory where 101 is located.因此,找不到该命令.
PATH环境变量包含用于搜索命令的目录列表.每个用户根据自己的需要设置自己的路径变量.
env | grep ^PATH
下面是以普通用户身份运行上述env
命令的一些示例输出,然后以root用户身份使用sudo
rkielty@rkielty-laptop:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
rkielty@rkielty-laptop:~$ sudo env | grep ^PATH
[sudo] password for rkielty:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
请注意,尽管类似,但在本例中,非特权用户(rkielty)和超级用户路径中包含的目录是not the same.
根用户的PATH变量中不存在foo.sh
所在的目录,因此出现command not found错误.