zoukankan      html  css  js  c++  java
  • /etc/profile环境变量配置进阶版/etc/profile.d

    一般情况下,我们配置环境变量时,都是通过/etc/profile文件进行配置。

    在环境变量配置不多时,我们的确可以这么做。但是环境变量要是很多呢?岂不是每次都要编辑这个文件,新增对应的环境变量。如果这样的话,我们要删除之前新增的环境变量,也只能在/etc/profile里慢慢找,逐个删除。这就很麻烦。

    那有没有更好的办法呢?

    有的,那就是使用/etc/profile.d/,在这个目录下新增环境配置文件即可。

    /etc/profile.d/这个目录是用来干嘛的呢?简单来说,它和/etc/profile的功能可以说是一样的,系统启动或者用户重新登录shell后,这个目录下的.*sh文件会自动解析配置到环境变量中。看下/etc/profile里是怎么写的

    那么使用/etc/profile.d/的好处是什么呢?那就是解耦环境变量。试想一下,我们在/etc/profile.d/配置了某个环境变量配置文件,什么时候我们不在需要这个环境变量了,我们只需要删掉这个.sh文件即可,不用再改/etc/profile,是不是就方便多了。

    下面以JAVA环境配置为例:

    新增编辑/etc/profile.d/java.sh,文件内容如下

    JAVA_HOME=/usr/local/jdk1.8.0_301
    JRE_HOME=/usr/local/jdk1.8.0_301/jre
    CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    export PATH

    我们来验证下

    [root@localhost profile.d]# grep JAVA_HOME /etc/profile    #并没有在profile里配置JAVA_HOME
    [root@localhost profile.d]# cat /etc/profile.d/java.sh    #我们在/etc/profile.d/目录下新增java.sh,并做JAVA环境变量配置
    JAVA_HOME=/usr/local/jdk1.8.0_301
    JRE_HOME=/usr/local/jdk1.8.0_301/jre
    CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    export PATH
    [root@localhost profile.d]# su - weblogic          #现在我们切换用户
    Last login: Fri Nov  5 00:39:57 CST 2021 on pts/3
    [weblogic@localhost ~]$ echo $JAVA_HOME           #JAVA_HOME变量已经有了
    /usr/local/jdk1.8.0_301
    [weblogic@localhost ~]$ java -version            #可查看java版本,说明JAVA环境配置成功
    java version "1.8.0_301"
    Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
    [weblogic@localhost ~]$ 

    题外话,顺便说下自己在研究这个/etc/profile.d过程中遇到的一个坑。事情是这样的,我之前二进制安装的mysql,mysql环境变量的配置,我是执行以下语句完成的。

    echo "PATH=/usr/local/mysql/bin:$PATH" >/etc/profile.d/mysqld.sh

    可以看到,我其实也是直接用/etc/profile.d。咋一看好像并没有问题,PTAH=mysql变量加上$PATH。最后mysqld.sh的最终内容其实是

    PATH=/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

    这种语句其实是有问题的。像/etc/profile.d下还有其他环境变量配置文件,一旦这个mysqld.sh不是最后一个执行的,就会导致最终PATH是/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

    实际上,这个语句把我坑了一下午。我把mysqld.sh配置好后,系统和mysql都没有问题。但是在按照上面配置JAVA环境时,出现问题了,死活没有识别出java命令。下面是我一个排查过程

     所以建议在使用echo命令,特别是带变量的,一定要特别注意下

  • 相关阅读:
    day17 内置方法、数学模块、randrange随机模块、序列化模块pickle
    线性模型L2正则化——岭回归
    KMP算法
    KNN算法:KNN-classifier和KNN-regressor
    机器学习开篇——编译器的选择
    STL好坑
    树状数组学习笔记
    无题
    最小树形图:朱刘算法
    2019ICPC徐州站题解
  • 原文地址:https://www.cnblogs.com/biaopei/p/15509280.html
Copyright © 2011-2022 走看看