我在朋友的服务器上有 sudo 访问权限,运行 centos-6.3,但是当我尝试运行某些命令时(例如,sudo vim /var/www/html/index.html
我收到错误)sudo: vim: command not found
,但是我可以运行,sudo su
然后vim /var/www/html/index.html
它可以按预期工作。
echo $PATH
并且sudo echo $PATH
都得出:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
sudo which vim
然而结果是:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
我尝试添加
export PATH=$PATH:/usr/local/bin
在使用时修复/root/.bashrc
了该问题sudo su
但不只是sudo <command>
。
我怎样去sudo <command>
上班?
答案1
在运行时sudo
,许多系统配置为清除环境中的所有非白名单值,并将 PATH 变量重置为清理后的值。
您将在 中找到前者,如Defaults env_reset
和 中所述。后者“安全”覆盖指定为– 删除此行可在ing时删除此行为。Defaults env_keep += "SOME_VARIABLE_NAME"
/etc/sudoers
PATH
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
sudo
sudo -V
当您以 身份运行时,会打印如何处理环境变量 root
。
如果您不想摆脱这些默认值,您可以随时使用其完整路径 ( sudo /usr/local/bin/vim
) 指定程序。
或者,您可以允许您的帐户SETENV
进入该sudoers
文件,例如:
%wheel ALL=(ALL) SETENV: ALL
这使您可以覆盖环境默认值,如下所示:sudo PATH=$PATH which vim
,因为该变量在执行命令之前已由您的 shell 解释,从而产生继承PATH
(但可能不包括/sbin
等)。
答案2
sudo echo $PATH
没有按照你的想法去做。$PATH
被(你的)shell 替换前执行命令。
为了实现所需的行为,您可以使用sudo -i
。
从男人须藤:
-i [命令]
这-我(模拟初始登录) 选项运行在密码(5)目标用户作为登录 shell 进入。这意味着登录专用资源文件(如
.profile
或 ).login
将被 shell 读取。如果指定了命令,则该命令将传递给 shell 执行。
答案3
我怎样去
sudo <command>
上班?
直到解决路径问题之前,请使用完整路径名
sudo /usr/local/bin/vim /var/www/html/index.html