我在Ubuntu 16.04中使用Go,并设置GOPATH
,GOROOT
并成功运行简单代码。
现在我想通过“gopacket”捕获网络数据包,但它需要sudo / root权限。我执行命令:sudo go run main.go
,它回显错误:
“exec:go:$ PATH中找不到可删除文件”
我用Google搜索并编辑了文件/etc/sudoders
并将行"Defaults env_reset"
更改为"Defaults !env_reset"
,但它不起作用...
你能帮助我吗?
答案 0 :(得分:6)
您的root用户未设置环境变量。不要尝试运行sudo go run ...
,而是在没有sudo的情况下构建二进制文件,例如go build
或go install
,然后使用sudo
执行二进制文件。
假设您位于main.go
的文件夹中,假设它名为mycapt
:
go build
sudo ./mycapt
或者:
go install
sudo $GOPATH/bin/mycapt
答案 1 :(得分:2)
sudo -E go run main.go
可能适合您。
以下是-E
man sudo
选项的内容
-E, --preserve-env
Indicates to the security policy that the user wishes to preserve
their existing environment variables. The security policy may return
an error if the user does not have permission to preserve the environment.