专栏首页喵了个咪的博客空间[喵咪Linux(2)]环境变量的坑

[喵咪Linux(2)]环境变量的坑

#[喵咪Linux(2)]环境变量的坑#

##前言##

玩过linux的童鞋对环境变量都不陌生,我们在安装好一些软件,组件之后想要直接使用它都需要加入环境变量,并且比如java啊golang都必须依赖你设置的环境变量来运行,在最近笔者在日常工作中遇到了一些关于环境变量的坎,所以今天把这些"坑"分享出来和大家交流!

附上:

喵了个咪的博客:w-blog.cn

##1. 两场景##

笔者有个习惯就是喜欢追问场景,比如别人问我一个问题,token要怎么用sign要怎么玩,我都会先问你是什么场景,什么场景才使用什么技术,简单或复杂,所以这样不例外我们先来了解一下,笔者遇到的两个场景分表是什么

###1.1 场景一###

笔者在使用supervison的时候需要使用root权限才能去执行一些命令,使用了发布工具没法直接得到root的权限,肯定也不能直接开发所有用户可以登录到root(风险很大),所以打算用ssh通过来获取root的权限执行命令,这个时候我使用了如下命令:

ssh root@localhost "supervisorctl restart xxxxx"

但是这个时候意外的返回了找不到命令bash: supervisorctl: command not found,我通过ssh连接上去是可以执行的是没有问题的

###1.2 场景二###

第二个场景是在使用go的时候遇到的,我也是需要发布go程序,然后使用部署的这个用户去build程序然后执行,这个时候居然提示了go命名不存在,这个时候很纳闷,按照约定是在/etc/profile里面配置好了应该配置的目录了啊,在root下面也是没有任何问题.

抱着怀疑的心态我把服务器reboot了一下,神奇的事情发生了root的go命名也没法使用了

##2. 出了什么问题?##

看是上面这两个场景,都是跨用户去执行命令的时候出现了找不到命令,只有一个东西可以解释这个问题,就是环境变量.

后面我试着通过env来查看环境变量,我的发布用户的环境变量比root少了一截,那我们就开始定位问题把,这个时候就不得不说Linux的环境变量的几种形式了

**/etc/profile:**此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行并从/etc/profile.d目录的配置文件中搜集shell的设置.

**/etc/bashrc:**为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取

**~/.bash_profile:**每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.

**~/.bashrc:**该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该

###2.1 场景一###

了解这上面这四种Linux获取环境变量的机制就不难解释场景一的问题了,大家可以看到除了/etc/bashrc除外的里面都有一个前提条件,当用户登陆时,如果你先登录到ssh是肯定没有问题的触发了登录操作,环境变量都会加载进来,但是如果是使用ssh root@localhost "xxxx" 后面带命令的形式的时候这个时候是不会触发login的只是单纯的执行一下命令就释放了,这个时候唯一能加载的环境变量就是/etc/bashrc所以需要去/etc/bashrc进行一下配置就ok了

###2.2 场景二###

场景二的问题就比较奇怪了,我的go环境变量是配置到/etc/profile中的理论上来说是不会出现我在这类问题的,之所以在reboot之前root可以使用是因为在配置好环境变量之后执行了source /etc/profile,解决方法还是和场景一的一样把环境变量移到/etc/bashrc中,在/etc/bashrc中的环境变量基本可以保证会加载进来

##3. 总结##

在很多时候教程啊等等指导的环境变量配置往往是在/etc/profile中,所以也就会有这一些奇奇怪怪的问题,大家以后配置环境变量可以通过你的不同的影响范围配置到不同地方可以实现不同的影响范围,大家get到了吗!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 原 荐 EMQ百万级MQTT消息服务(TLS

    喵了个咪233
  • phalapi-入门篇2(把它玩起来)

    #phalapi-入门篇1(把它玩起来)# ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 这一小...

    喵了个咪233
  • IOT设备通讯协议MQTT

    哈喽大家好呀!笔者的公司最近在做IOT设备相关的业务,基于这个契机寻找学习了一下关于IOT通讯协议相关的内容,最终在技术选型上选择了使用MQTT协议并且结合EM...

    喵了个咪233
  • Subsets

    Given a set of distinct integers, nums, return all possible subsets.

    Tyan
  • 实现RTSP网站微信直播方案EasyNVR(linux版)部署问题之:ERR_CONTENT_LENGTH_MISMATCH

    基于是web页面出现的问题,第一反应一定是“F12”查看一下接口请求情况、是否有数据返回。。。。。

    EasyNVR
  • ubuntu服务器从环境搭建到Jenkins自动化部署

    ?因为项目中使用了elasticsearch和rocketmq,服务器没有安装,所以项目一直处于启动中状态,==。

    喜欢天文的pony站长
  • 生产环境使用kubeadm1.5版本证书到期解决方案

    生产环境使用k8s-1.5版本并且使用kubeadm直接安装后,出现证书一年到期,整个集群无法使用的情况。

    kubernetes中文社区
  • 开发中常见的功能权限管理

    一般情况下就会有权限界面,角色界面,用户界面。常用的数据表会有权限表,角色表,用户表,权限角色关联表,用户角色关联表。

    用户1956326
  • 《黑色皮包》入围翠贝卡电影节,独家专访VR影像导演邵晴,探索全新镜头表达语言!

    (VRPinea4月10日电)近日,受全球性新冠病毒疫情影响,翠贝卡电影节的主办方不得不再次宣布延期其准备在4月召开的活动。

    VRPinea
  • DevOps 最佳实践:开箱即用的腾讯开源微服务框架 TARS

    1969年,两台主机第一次实现通讯,互联网从此诞生,发展至今,茫茫无涯如宇宙。在这风云迭起的互联网宇宙中,每一个开发者都是勇于探索的宇航员,行在漫长艰阻的开发道...

    DevOps时代

扫码关注云+社区

领取腾讯云代金券