偶爾發(fā)現(xiàn)的一個(gè)問(wèn)題酱鸭,平時(shí)主要使用 Ubuntu 操作系統(tǒng)侠驯,有時(shí)候安裝一些軟件會(huì)用加一些自定義PATH躲雅,往往為了方便都會(huì)把配置寫(xiě)到 /etc/environment 里面,這樣所有用戶(hù)包括root都有效:
jwang@jwang:~$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
/bin:/usr/games:/usr/local/games:/home/jwang/MyBin:/opt/go/bin"
export GOPATH=/home/jwang/Go
比如說(shuō)安裝了go劫乱,在使用 sudo go 這樣命令的時(shí)候會(huì)報(bào)錯(cuò)巡李,但是切換到 root 用戶(hù)卻沒(méi)有問(wèn)題澄者,使用普通用戶(hù)也沒(méi)問(wèn)題笆呆,查了一下發(fā)現(xiàn)原來(lái) sudo 里面有一些配置:
sudo visudo
在這個(gè) /etc/sudoers 文件里面,有一個(gè)secure_path配置粱挡,大家一看就知道了赠幕,它的意思當(dāng)你使用 sudo+command 這種形式執(zhí)行命令的時(shí)候會(huì)從其配置的路徑里面尋找命令,肯定是沒(méi)有你自定義的PATH的询筏,這個(gè)主要是安全考慮榕堰。
解決方法有幾種:
- 直接把自定義PATH路徑配置在secure_path里面,簡(jiǎn)單粗暴嫌套,就是有點(diǎn)麻煩
- 將 Defaults env_reset 改成 Defaults !env_reset 取消掉對(duì)PATH變量的重置逆屡,然后在.bashrc中最后添加alias sudo='sudo env PATH=$PATH',這個(gè)感覺(jué)更麻煩
- 直接把這3行注釋掉踱讨,經(jīng)測(cè)試完全沒(méi)有任何問(wèn)題