偶尔发现的一个问题,平时主要使用 Ubuntu 操作系统,有时候安装一些软件会用加一些自定义PATH,往往为了方便都会把配置写到 /etc/environment 里面,这样所有用户包括root都有效:
1 | jwang@jwang:~$ cat /etc/environment |
比如说安装了go,在使用 sudo go 这样命令的时候会报错,但是切换到 root 用户却没有问题,使用普通用户也没问题,查了一下发现原来 sudo 里面有一些配置:
1 | sudo visudo |
在这个 /etc/sudoers 文件里面,有一个secure_path配置,大家一看就知道了,它的意思当你使用 sudo+command 这种形式执行命令的时候会从其配置的路径里面寻找命令,肯定是没有你自定义的PATH的,这个主要是安全考虑。
解决方法有几种:
直接把自定义PATH路径配置在secure_path里面,简单粗暴,就是有点麻烦
将 Defaults env_reset 改成 Defaults !env_reset 取消掉对PATH变量的重置,然后在.bashrc中最后添加alias sudo=’sudo env PATH=$PATH’,这个感觉更麻烦
直接把这3行注释掉,经测试完全没有任何问题
我是采用第3种方式解决的,非常好用,暂时未发现问题!