wget https://studygolang.com/dl/golang/go1.13.4.linux-amd64.tar.gz
# 解压,权限不够的话要加sudo
sudo tar xfz go1.17.5.linux-amd64.tar.gz -C /usr/local
配置环境变量
#编辑系统配置文件
vim ~/.bashrc
#最后一行加上如下两行
export GOPATH=/usr/local/go
export PATH=$GOPATH/bin:$PATH
#重新执行初始化文件使修改后的新配置立即生效
source ~/.bashrc
查看是否配置成功(如何处理warning):
go version
#返回了warning
warning: GOPATH set to GOROOT (/usr/local/go) has no effect
go version go1.17.5 linux/amd64
vim ~/.bashrc
#修改一下前面配置的参数
export GOROOT=/usr/local/go
export GOPATH=$PATH:$GOROOT/bin
source ~/.bashrc
#重试
go version
#warning消失
go version go1.17.5 linux/amd64
sudo执行提示找不到go
网上下载的go程序,如二进制文件一般要用 ./[xxx] 来执行。如果是在普通用户登录的shell,那么很有可能返回permission denied。此时你会想到加上sudo。然而你又收到了新的错误:
sudo: go: command not found
如果已经配置好了go的环境变量,那么理论上无论是在普通用户还是root用户下都可以正常执行go指令。但使用sudo时实际上参照了单独的配置文件/etc/sudoers
,因此sudo go是找不到go的位置的,需要配置该文件:
sudo vim /etc/sudoers
#修改以下行,加入/usr/local/go/bin/,用冒号隔开
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
#修改后
Defaults secure_path = /usr/local/go/bin/:/sbin:/bin:/usr/sbin:/usr/bin
然后终端cd到你要运行的文件目录下,用chmod给文件权限,再运行就可以了
sudo chmod u+x run.sh
sudo ./run.sh
后记
笔者并不是一个专业的、熟练的运维人员,对Linux的知识了解甚少。通过这次问题,我发现sudo命令和su账户之间的关系并没有那么简单。如果使用su进入高级账户终端,那么可能也就不会遇到这些奇怪的问题(我还没有尝试,但我想在有空的时候总结一下普通用户shell和高级用户的shell在使用时的那些区别)。
Quotehttps://askubuntu.com/questions/118263/some-programs-not-found-when-used-with-sudo
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)