Ubuntu安装Go环境(sudo: go: command not found)找不到指令或没有权限

Ubuntu安装Go环境(sudo: go: command not found)找不到指令或没有权限,第1张

获取并解压二进制文件
 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在使用时的那些区别)。

Quote

https://askubuntu.com/questions/118263/some-programs-not-found-when-used-with-sudo

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/990719.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存