为什么将命令作为sudo运行会返回找不到命令?


12

示例命令:

drush cc all

可以,但是:

sudo drush cc all

给我:

sudo: drush: command not found

为什么?如何解决?


有时我也会遇到这个问题,例如使用cd。使用dzdo cd返回“找不到命令”。当然,后来我才意识到,cd荷兰国际集团到一个目录,我没有在,不会帮助权限非常多,所以我要么需要一个root shell或需要dzdo lsdzdo mv等来自外部的内容是目录。
2015年

2
问题sudo cd在于那cd是一个内置命令,而不是程序。如果您想进入一个无权访问的目录,并(例如)在其中重命名文件,则可以执行(例如)sudo mv dir/oldfile dir/newfile sudo sh -c "cd dir; mv oldfile newfile"
G-Man说'Resstate Monica''Nov

Answers:


13

当您sudo获得时,您将得到一个预配置的$PATH,(类似于)root用户的默认路径。您的程序不在由标识的目录列表中$PATH

例如看

sudo在执行外部命令时会尝试确保安全。

有两种不同的方法来处理环境变量。默认情况下,env_reset sudoers 选项处于启用状态。这导致命令与一个含有最小的环境中执行TERMPATHHOMESHELLLOGNAMEUSERUSERNAME除了从调用过程变量允许通过env_checkenv_keep sudoers的选项。实际上有一个环境变量白名单。

如果您无法配置sudo保留$PATH,则通常的解决方法是指定程序的完整路径名。这对于在(未访问的)目录中调用其他可执行文件的脚本可能效果不佳。


0

您应该指定完整路径。它也更安全;如果您没有指定路径,则可以想象攻击者可以创建另一个具有root权限运行的程序。

另外,您需要在其中插入一行/etc/sudoers以允许它。man sudoers对于语法,在此处放置太多内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.