错误描述

环境

  • CentOS7.1 x64
  • golang 1.9.3

golang目录:/home/moonlightwatch/go/

环境变量配置:

# /etc/profile
export GOROOT=/home/moonlightwatch/go
export GOPATH=/home/moonlightwatch/codes/golang/godefault:/home/moonlightwatch/codes/golang/workspace
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

现象

  1. 使用非root用户,执行 go version 获得正确输出。
  2. 使用root用户,执行 go verison 获得正确输出。
  3. 使用非root用户,执行 sudo go version 获得输出 sudo: go: command not found

日了狗了有木有?

解决

原因

根据 Some programs not found when used with sudo 中的回答。

我们使用 sudo 时,使用的配置文件是 /etc/sudoers

解决

配置 /etc/sudoers 文件中的 Defaults secure_path 这一项。将 $GOROOT/bin 目录加入进去。(请使用绝对目录,如:/home/moonlightwatch/go/bin/)

Defaults secure_path 这一行,在文件中是这样子的:

Defaults    secure_path = /home/moonlightwatch/go/bin:/sbin:/bin:/usr/sbin:/usr/bin

其他问题

当我们使用了自己 GOPATH 中的包时,sudo go run xxxx 并不会在我们环境变量指定的目录去查找包。

我们需要设置 /etc/sudoers 文件中的 Defaults env_keep 项。向其中加入我们的 GOPATH 环境变量。

Defaults env_keep 这几行,在文件中是这样的:

Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults env_keep += "GOPATH"

加上最后的那一行就行。

sudo 找不到命令 go的更多相关文章

  1. [转]sudo找不到命令:修改sudo的PATH路径

    sudo有时候会出现找不到命令,而明明PATH路径下包含该命令,让人疑惑.其实出现这种情况的原因,主要是因为当 sudo以管理权限执行命令的时候,linux将PATH环境变量进行了重置,当然这主要是因 ...

  2. Linux sudo 找不到命令

    普通用户执行需要root权限的命令,提示"找不到命令",但是root用户执行该命令不报错,可能是由于该命令未处在sudo搜索的路径. 本文以sudo easy_install 为例 ...

  3. 如何解决普通用户使用sudo找不到命令

    一.在linux的普通用户下,要使用root权限的命令需要使用sudo [dev@dev1 client_api]# sudo git pull origin develop sudo: git: c ...

  4. 使用sudo执行命令的时候提示找不到命令

    事出有因, 源自使用源码编译 nginx , 在 /usr/local/sbin/ 目录下创建了nginx 启动的符号链接 , 执行 sudo nginx 的时候提示找不到命令, 但是使用普通用户身份 ...

  5. sudo pm2 提示 找不到命令

    一共有 3 台 staging 环境服务器,5 台生产环境服务器,centos7系统.前阵子刚给所有研发配置了自己的账号,今天有小伙伴说,在其中两台服务器上 sudo pm2 list 提示: sud ...

  6. sudo 运行 npm或node时,出现找不到命令

    sudo 运行 npm或node时,出现找不到命令的情况,运行下面这些命令, sudo ln -s /usr/local/bin/node /usr/bin/node sudo ln -s /usr/ ...

  7. java 安装后 不能 java javac 说找不到命令 -bash: javac: command not found

    java 安装后 不能 java javac  说找不到命令 -bash: javac: command not found 不是环境变量的问题, 直接cd到java的目录 也不能执行命令 后来发现是 ...

  8. linux使用npm成功安装命令后,执行时却报找不到命令的问题

    # 使用npm安装serve命令 ~$ npm install serve --global 安装成功 # 可是执行命令会报错 ~$ serve -v bash: serve: command not ...

  9. Linux下修改环境变量,不小心改错,找不到命令解决办法

    PATH改错了找不到命令 解决方法: 重新定义PATH export PATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/us ...

随机推荐

  1. MySQL 单表优化

    一.表字段优化 1.整数类型尽量使用 TINYINT.SMALLINT.MEDIUM_INT 而不是INT,非负数要加上UNSIGNED 2.VARCHAR的长度分配要合理,不要过大 3.时间字段不超 ...

  2. mybatis分页 -----PageHelper插件

    对查询结果进行分页 一,使用limit进行分页 1.mybatis 的sql语句: <if test="page !=null and rows !=null"> li ...

  3. PAT L1-027 出租

    https://pintia.cn/problem-sets/994805046380707840/problems/994805107638517760 下面是新浪微博上曾经很火的一张图: 一时间网 ...

  4. Atlas & mysql-proxy

    Atlas https://github.com/Qihoo360/Atlas https://github.com/Qihoo360/Atlas/wiki/Installing-Atlas Atla ...

  5. 类的三大方法 与__init___

    静态方法  存储在类中 实例方法 与类方法都能调用 不需要 传递self 相当于在类里面写了一个函数 类方法 存储在类中 只能是类调用 普通方法  存储在类中  由实例对象使用 在实例化类的时候 就相 ...

  6. linq 分组取各组最大值

    static List<User> list1 = new List<User>() { new User(){id=1,name="张三"}, new U ...

  7. ef 仓储模式 Redis

    接着写一下 上一章提到的 BaseRepositoryRedis.cs 先说说题外话:由于公司希望用到缓存来提高访问速度.那么我理所当然的想到redis. 这个无可厚非.可是当时我们的项目已经开发的差 ...

  8. loj#2009.「SCOI2015」小凸玩密室

    题目链接 loj#2009. 「SCOI2015」小凸玩密室 题解 树高不会很高<=20 点亮灯泡x,点亮x的一个子树,再点亮x另外的子树, 然后回到x的父节点,点亮父节点之后再点亮父节点的其他 ...

  9. 获取外网出口ip

    curl ifconfig.me 或 curl cip.cc

  10. Java新AIO/NIO2:AsynchronousServerSocketChannel和AsynchronousSocketChannel简单服务器-客户端

    Java新AIO/NIO2:AsynchronousServerSocketChannel和AsynchronousSocketChannel简单服务器-客户端用AsynchronousServerS ...