/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命令,特別是帶變量的,一定要特別注意下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM