我在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",但它不工作...
你能帮助我吗?
您的环境变量未为root用户设置.不要尝试运行sudo go run ...,而是在没有sudo的情况下构建二进制文件,例如go build或者go install,然后执行二进制文件sudo.
假设你在文件夹中main.go,假设它被称为mycapt:
go build
sudo ./mycapt
Run Code Online (Sandbox Code Playgroud)
要么:
go install
sudo $GOPATH/bin/mycapt
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)