我在我的朋友服务器上有 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
Run Code Online (Sandbox Code Playgroud)
sudo which vim 然而产生:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
Run Code Online (Sandbox Code Playgroud)
我试过添加
export PATH=$PATH:/usr/local/bin
Run Code Online (Sandbox Code Playgroud)
在/root/.bashrc其使用时,作为固定的问题,sudo su而不是只sudo <command>。
我如何sudo <command>上班?
Dan*_*eck 18
运行时sudo,许多系统被配置为清除所有非白名单值的环境,并将 PATH 变量重置为已清理的值。
你会发现前者为Defaults env_reset和几个Defaults env_keep += "SOME_VARIABLE_NAME"在/etc/sudoers。后一个“安全”PATH覆盖指定为Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin– 删除此行以在sudoing时删除此行为。
当您 sudo -V以root.
如果您不想摆脱这些默认设置,您始终可以使用完整路径 ( sudo /usr/local/bin/vim)指定程序。
或者,您可以允许您的帐户SETENV在sudoers文件中,例如:
%wheel ALL=(ALL) SETENV: ALL
Run Code Online (Sandbox Code Playgroud)
这允许您像这样覆盖环境默认值:sudo PATH=$PATH which vim,因为该变量在执行命令之前由您的 shell 解释,导致继承PATH(/sbin尽管可能不包括等)。
sudo echo $PATH
Run Code Online (Sandbox Code Playgroud)
不做你想的。在执行命令之前$PATH被(您的)shell替换。
要完成所需的行为,您可以使用sudo -i.
来自sudo:
-i [命令]
的-i(模拟初始登录)选项运行在指定的外壳的passwd目标用户(5)的条目作为登录shell。这意味着shell 将读取特定于登录的资源文件,例如
.profile或.login。如果指定了命令,则将其传递给 shell 执行。
| 归档时间: |
|
| 查看次数: |
19951 次 |
| 最近记录: |