xpt*_*xpt 57 linux sudo path command-line ubuntu
如果我发出
sudo my-command
Run Code Online (Sandbox Code Playgroud)
Linux 如何寻找它my-command?
该my-command是我的道路。我可以毫无问题地调用它。但是,当我用 调用它时sudo,我会得到command not found. 如何克服它?
编辑:那个"Possible duplicate"选择的答案是错误的,好吧,至少不是重点。来自terdon的这个答案是正确的。
ter*_*don 76
这通常由 中的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.
Run Code Online (Sandbox Code Playgroud)
要运行不在默认值中的命令$PATH,您可以
使用完整路径:sudo ~/bin/my-command; 或者
将包含命令的目录添加到secure_path. 运行sudo visudo并编辑安全路径行:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
Run Code Online (Sandbox Code Playgroud)
保存文件,下次运行时sudo,该目录~/bin将在其$PATH.
Mar*_*n_W 10
您也可以使用sudo env PATH=$PATH ...rest_of_command_here.... 由于输入不太方便,我添加了一个别名alias sudop='sudo env PATH=$PATH'。(sudop而不是别名sudo本身)提醒我,让我意识到我正在保留当前的环境路径。
小智 8
这是我用来解决问题的方法:
sudo cp $(which my-command) /usr/bin
...
Run Code Online (Sandbox Code Playgroud)
该which命令是在非 root 的子 shell 中执行的,因此能够找到my-command,然后 sudo 将可执行文件复制到用户可以访问的路径root。对于安全性来说不太好,但对我来说运行一个在命令运行后立即被销毁的 docker 镜像是可以的。
| 归档时间: |
|
| 查看次数: |
62711 次 |
| 最近记录: |