关于“sudo go run main.go”

时间:2016-11-02 07:24:57

标签: go path sudo

我在Ubuntu 16.04中使用Go,并设置GOPATHGOROOT并成功运行简单代码。

现在我想通过“gopacket”捕获网络数据包,但它需要sudo / root权限。我执行命令:sudo go run main.go,它回显错误:

  

“exec:go:$ PATH中找不到可删除文件”

我用Google搜索并编辑了文件/etc/sudoders并将行"Defaults env_reset"更改为"Defaults !env_reset",但它不起作用...

你能帮助我吗?

2 个答案:

答案 0 :(得分:6)

您的root用户未设置环境变量。不要尝试运行sudo go run ...,而是在没有sudo的情况下构建二进制文件,例如go buildgo 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.