“go.tools”的权限被拒绝错误

Posted

技术标签:

【中文标题】“go.tools”的权限被拒绝错误【英文标题】:Permission denied error for 'go.tools' 【发布时间】:2014-12-03 13:33:51 【问题描述】:

当我尝试安装 go 工具时,/usr/local/go/pkg/tool/linux_amd64/cover 的权限被拒绝。我可以接受,因为它是/usr/local/ 目录并且需要root 访问权限。 但我的第一个疑问是为什么当我将GOPATH 设置为其他位置时它会尝试安装在此位置。

$ go version
go version go1.2.1 linux/amd64

$ export GOPATH='/home/vagrant/repos/atlantis-router/vendor'
$ go get code.google.com/p/go.tools/cmd/cover
go install code.google.com/p/go.tools/cmd/cover: open /usr/local/go/pkg/tool/linux_amd64/cover: permission denied

$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/vagrant/repos/atlantis-router/vendor"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
TERM="dumb"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CXX="g++"
CGO_ENABLED="1"

谁能指导我解决这个问题?可能是什么原因?

【问题讨论】:

【参考方案1】:

Go 尝试将该工具安装在 $GOTOOLDIR 中,而不是 $GOPATH,并且您可以看到它设置为 /usr/local/go/pkg/tool/linux_amd64。同样的事情也发生在我身上。

我猜,只需使用 sudo 运行它,因为该目录中还有其他工具,而且我认为将 GOTOOLDIR 设置到其他地方可能会搞砸。

【讨论】:

使用 'sudo' 运行 'go get' 失败并显示 'sudo: go: command not found'。我用'sudo go get code.google.com/p/go.tools/cmd/cover' @ram 将 /usr/local/go/bin 添加到 root 的 $PATH 我的 $PATH 显示它包含在 $PATH 中。 “$ echo $PATH /home/vagrant/bin:/usr/local/sbin:....:/usr/local/go/bin”。和你说的不一样吗? sudo echo $PATH 说什么? @ram 所以只需运行sudo -s 然后运行 ​​go get 以 root 身份正常运行

以上是关于“go.tools”的权限被拒绝错误的主要内容,如果未能解决你的问题,请参考以下文章

apache配置中的权限被拒绝:[Errno 13]权限被拒绝

挂载文件时获取权限被拒绝错误

错误:EACCES:权限被拒绝

颤振完成错误:ProcessException:权限被拒绝

水壶 gpload 失败错误:权限被拒绝:没有创建可读 gpfdist(s) 外部表的权限

错误:EACCES:权限被拒绝,mkdir '/.npm'