在 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/sudoers
man 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
修改 sudoers
secure_path
以包含位置 - 如果您决定这样做,请使用sudo visudo
捕获任何语法错误(否则您可能会面临sudo
完全锁定自己的风险)。
然而,你也许应该读一下为什么用户永远不应该使用普通的 sudo 来启动图形应用程序?然后才能继续。
答案2
而不是跑步
sudo myCommand
你可以做
sudo /full/path/to/myCommand
或者
sudo "$(which myCommand)"