以 sudo 方式运行程序不起作用

以 sudo 方式运行程序不起作用

在 Ubuntu 18.04 中使用 sudo 安装工具和其他命令行非常完美。示例:sudo apt install ...完美运行。以 sudo 身份通过命令行运行工具和程序根本不起作用。以普通用户身份运行相同的程序和工具非常完美。示例:以start gtkwave普通用户身份弹出 gtkwave GUI。以 sudo 身份启动 gtkwave,要求输入密码,然后以以下内容结束: sudo: gtkwave: command not found

我必须说,在命令行上以 sudo 调用的一些工具可以完美地工作,例如,我可以以普通用户和 sudo 的身份从命令行启动 Atom。

这可能是因为未以 sudo 身份运行的工具/程序未安装在常见的 Linux 文件夹中/bin,而是/usr/bin安装在下的程序中/opt(这些程序已添加到路径中并设置了必要的环境)?

有人知道为什么会发生这种情况吗?

答案1

默认情况下,使用文件中定义的sudo自身程序来搜索程序。来自:secure_path/etc/sudoersman sudoers

 secure_path   Path used for every command run from sudo.  If you don't
               trust the people running sudo to have a sane PATH environ‐
               ment variable you may want to use this.  Another use is if
               you want to have the “root path” be separate from the “user
               path”.  Users in the group specified by the exempt_group
               option are not affected by secure_path.  This option is not
               set by default.

请注意,尽管最后一行是这样的,但默认的 Ubuntu/etc/sudoers 设置它:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

因此,使用时,调用用户PATH和 root 的用户PATH都不会影响程序是否位于其中sudo

如果你确实希望程序位于/opt可以通过以下方式执行的位置sudo,则需要

  • 使用完整路径,例如sudo /opt/somepath/bin/prog

  • 修改 sudoerssecure_path以包含位置 - 如果您决定这样做,请使用sudo visudo捕获任何语法错误(否则您可能会面临sudo完全锁定自己的风险)。

然而,你也许应该读一下为什么用户永远不应该使用普通的 sudo 来启动图形应用程序?然后才能继续。

答案2

而不是跑步

sudo myCommand

你可以做

sudo /full/path/to/myCommand

或者

sudo "$(which myCommand)"

相关内容