当前位置: 首页 > 面试题库 >

使用sudo时找不到命令

景岳
2023-03-14
问题内容

foo.sh我的主文件夹中有一个脚本。

当我导航到该文件夹​​并输入时./foo.sh,我得到

-bash: ./foo.sh: Permission denied

当我使用时sudo ./foo.sh,我得到

sudo: foo.sh: command not found

为什么会发生这种情况,我该如何解决?


问题答案:

没有权限

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

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

要阅读本地系统的chmod文档,请运行man chmodinfo 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
   ^  ^  ^

就Linux而言,foo.sh现在是可执行的。

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

使用 sudo 运行命令时,您实际上是以超级用户或root用户身份运行它的。

根用户没有找到自己指令的原因,很可能是PATH根环境变量不包括 地方目录foo.sh所在。因此找不到命令。

PATH环境变量包含要搜索命令的目录列表。每个用户根据自己的需求设置自己的PATH变量。看看它要运行什么

env | grep ^PATH

这是一些env先以普通用户身份然后以sudo身份以root用户身份运行上述命令的示例输出

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))和超级用户 并不相同

其中目录foo.sh所在是不存在于根用户的PATH变量,因此 命令没有发现 错误。



 类似资料:
  • 我有一个脚本叫做在我的主文件夹中。 当我导航到这个文件夹,并输入,我得到 . 当我使用时,我得到 。 为什么会发生这种情况,我如何解决它?

  • 我正在学习bash在我的Mac: 在我的Mac中有一个最简单的bash脚本,名为: 但在我的终端中,我想运行它,但失败了: 我不知道为什么会有错误,一切都好。

  • 问题内容: 我在运行Jar文件的Linux机器上有一个bash脚本。以普通用户身份登录时,我没有运行脚本的权限,但它会显示以下日志: 当我尝试将脚本与Sudo一起使用时,它给出了: 我已经在上面设置了相同的路径-可以通过&看到它,它也被设置为脚本中的一个选项。我很高兴脚本不是问题- 这是默认的CQ5控制脚本,并且我在其他数十个工具箱上都使用了它而没有问题。只是不确定我在上面做错了什么,并认为这是我

  • 问题内容: 我刚刚在新的EC2微型实例上安装了nodejs。 我通常安装它,./configure-> make-> sudo make install。 问题: 当我在ec2-user下运行“ node”时,它运行正常。当我运行“ sudo节点”时,它失败。 我发现该节点位于: 而当前路径是 但是,sudo路径是 然后我尝试编辑根PATH以包含到节点的路径,因此当我以root身份登录时,“ no

  • https://github.com/thtrieu/darkflow 在Ubuntu 20.04 我认为我的flow文件有问题,所以我试图通过以下代码重建构建文件 这就是我得到的。 设置。py:6:弃用警告:imp模块已弃用,取而代之的是importlib;有关导入imp运行build_ext building“暗流”的替代用途,请参阅模块文档。cython_utils。nms的扩展名x86_6

  • 问题内容: 我想在Ubuntu启动时运行一个命令(在任何人登录之前): 我该怎么做? 问题答案: 您可以在启动结束时执行的脚本中添加命令。 在之前编写命令。之后写的任何内容都将永远不会执行。