linux下的sudo文件夹,linux – 使用sudo时找不到命令

没有权限

为了运行脚本,文件必须设置了可执行权限位。

为了完全理解Linux file permissions,您可以学习chmod命令的文档。 chmod,更改模式的缩写,是用于更改文件的权限设置的命令。

要读取本地系统的chmod文档,请从命令行运行man chmod或info chmod。一旦阅读和理解你应该能够理解运行的输出…

ls -l foo.sh

…将列出文件所有者,组所有者和不是文件所有者或文件所属组的成员的所有其他人的READ,WRITE和EXECUTE权限(最后一个权限组有时称为作为“世界”或“其他”)

以下是如何解决您的情况下的“权限被拒绝”错误的摘要。

$ 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

^ ^ ^

foo.sh现在可以直到Linux的可执行。

在找不到命令中使用sudo结果

当您使用sudo运行命令时,您将有效地将其作为超级用户或root运行。

root用户找不到您的命令的原因很可能是root的PATH环境变量不包括foo.sh所在的目录。因此找不到命令。

PATH环境变量包含搜索命令的目录列表。每个用户根据自己的需要设置自己的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

注意,尽管类似,在这种情况下,PATH中包含的目录的非特权用户(rkielty)和超级用户不一样。

root用户的PATH变量中不存在foo.sh所在的目录,因此找不到命令错误。