etcprofile环境变量配置进阶版etcprofile.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环境配置为例:
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  500: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命令,特别是带变量的,⼀定要特别注意下

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。