我在我的朋友服务器上有 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
– 删除此行以在sudo
ing时删除此行为。
当您 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 次 |
最近记录: |