1. 程式人生 > 其它 >Linux環境變數及其配置

Linux環境變數及其配置

為什麼要說這個呢?

本人喜歡使用Linux開發(工作是個硬要求,有些時候不能使用Linux,比如我上一個工作。但是有些時候呢,工作環境比較開放,我可以選擇我喜歡的系統進行工作:比如我現在的工作。紅紅火火~,下次給大家分享我的Ubuntu).我呢對日常工作對滑鼠點點點並不敏感,還是喜歡快捷的命令列。這裡舉例子也是,也是基於Ubuntu系統哈,其實配置都是一樣的。

1、環境變數 - profile和bashrc檔案的區別

如果配置過Linux的環境變數就會知道,在伺服器上的Linux配置環境變數是修改/etc/profile檔案。而桌面版的Linux發行版,我們會糾結使用哪個檔案儲存環境變數如:

  • /etc/profile
  • /etc/bashrc
  • ~/.profile
  • ~/.bashrc

shell可以分為login shell / non-log shell / interactive shell / non-interactive shell

  • login shell登陸式shell,需要登陸校驗使用者密碼後執行的shell,如su - xx ,ssh連線。
  • non-login shell,非登陸式shell,通常只要是當前使用者開啟的終端,不去校驗登陸。如 bash -c "xxx"命令、桌面系統開啟終端,都是使用non-login shell方式
  • interactive,互動式shell,就是通常變輸入命令,邊執行
  • non-interactive,非互動式shell,如shell指令碼。

這四種shell舉例如下:

登陸式shell 非登陸式shell
互動式shell ssh 登陸,su 登陸 新開啟一個終端
非互動式shell 執行一個指令碼 比較罕見,可以使用bash -l -c 啟動一個看看

參考:https://askubuntu.com/questions/879364/differentiate-interactive-login-and-non-interactive-non-login-shell

環境變數配置檔案和不同的shell相關,登陸式shell,載入profile檔案。非登陸式shell,不載入profile檔案,載入bashrc檔案。非互動非登陸shell不載入任何環境變數檔案,它直接使用$BASH_ENV

  • bashrc 是主要作用於non-login shell
  • profile 是主要作用於login shell
  • etc下是作用在全域性,而~/下的檔案只是作用與此使用者
  • etc目錄下和~下的檔案具有繼承關係

所以我們每次登陸都會載入/etc/profile -> /.profile,而當建立新的終端時,則會載入bashrc和/.bashrc檔案。其實我們配置環境變數在哪個檔案內都可以起作用,如果配置到profile檔案中,則需要登出重新登入或重啟電腦;而配置到bashrc檔案中,則只需要重新開啟新的終端或source即可。如果是在/etc目錄,這全部使用者都可用;反之,只有此使用者可用。

2、JDK環境變數配置

上面我們說過了profile和bashrc兩種檔案的區別,而配置jdk環境變數我們應當配置在哪個檔案中呢?
首先,我們通常在server中配置環境變數通常都是直接修改/etc/profile檔案,為什麼這樣幹?因為企業中一個伺服器,因為每個人的許可權不同,會產生很多很多使用者使用這臺server,而server通常是用來部署服務,所以不管哪個使用者登入到此server上,都要能夠使用到java的環境變數,這種全部使用者都可使用且冗餘環境沒什麼影響的時候,通常選擇一個全域性的配置項。
然而如果是個人電腦呢?哈哈,我呢同樣是建議使用全域性配置。為啥?因為Linux系統,是一個天生多使用者作業系統,且我們既然涉及到環境變數配置,少不了是用來做開發。所以日常使用中會經常切換使用者(比如普通使用者切換到root)如果只在普通使用者的home下配置.bashrc環境,切換到root後是沒有java環境的,這樣我們還要再重新配置。

1. JDK下載(openJDK)

  • 我這裡使用JDK11,jdk11下載:https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz
  • 其他版本下載地址:https://jdk.java.net/
  • Open jdk其實已經趨於成熟,本質上和Oracle jdk沒有什麼區別。現在Oracle jdk下載已經需要登入了,所以還是OpenJdk省時間。我們常用的jdk版本無非是jdk8和jdk11,如果是自己開發,選擇一個更高版本的吧,即能促進自己的進步又能學習更新的技術。老的早晚會被淘汰。
  • jdk安裝目錄:/usr/local/jdk11

2. JDK11環境變數配置 - 修改profile檔案

sudo cp /etc/profile /etc/profile.bak
sudo vim /etc/profile
# 在檔案末尾追加
export JAVA_HOME=/usr/local/jdk11
export PATH=$JAVA_HOME/bin:$PATH
# 因為jdk11中已經不包含jvm的環境了,所以我們就沒必要去配置CLASSPATH,如果使用jdk8,如下
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 修改完profiles檔案需要注意一個問題

上述配置完成後,如果是桌面環境,使用 source /etc/profiles 只能使當前會話java環境變數生效。如果要生效,需要重新登入或重啟電腦。

3. JDK11環境變數配置 - 使用profile.d目錄

都1202了,我呢,還是希望大家別在使用修改/etc/profile檔案的方式去配置環境變量了。/etc/profile中的內容是非常重要的,一旦因誤操作(因為大家都是使用vim,萬一在某一行多按了兩下dd)導致環境變數錯誤是得不償失的。
那麼多次,我們到/etc目錄下,難道大家就沒有發現存在一個目錄: /etc/profile.d 嗎?通常Linux中xxx.d的目錄都是自動載入配置檔案的目錄,所以我們也只需要在裡面新建個檔案即可。雖然說不是直接修改的profile檔案,但本質上是一樣的,同樣是登入時才會重新載入profile檔案及其profile.d資料夾下的變數。所以桌面環境需要重新登入。

cd /etc/profile.d
sudo vim dev-soft-path.sh
# 在檔案中新增Java環境變數即可
export JAVA_HOME=/usr/local/jdk11
export PATH=$JAVA_HOME/bin:$PATH
# 因為jdk11中已經不包含jvm的環境了,所以我們就沒必要去配置CLASSPATH,如果使用jdk8,如下
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

4. 檢查環境變數配置是否生效

  • 修改profile類檔案:需要重新登入
  • 修改bashrc類檔案:當前會話只需要執行 source ~/.bashrc重新載入環境變數;新建立會話會自動載入。
# 執行一下java命令檢視java環境變數是否達到期望
$ java
$ javac
$ java -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

3、Maven環境變數配置

配置Maven環境變數需要依賴Java環境,否這無法執行mvn命令。
Maven是我們開發中最最常用的一個包管理工具了吧。所以我們配置了Maven的環境變數,就能直接在終端中使用命令打包,釋放了ide,也減少了在ide中的配置,習慣了用起來很爽的。Maven環境變數的配置和JDK環境變數是差不多的,也可以所是一樣的。

1. 下載Maven包

官方下載地址:https://archive.apache.org/dist/maven/maven-3/
清華源:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/
官方下載比較慢,所以大家一定要學會使用國內源。學習Linux也是一樣的,如果不使用國內源的話,網速會調教你的。清華源與163算是兩個比較古老的國內源了,都是非常挺穩定且網速跟的上的。

  • 安裝地址:/usr/local/maven3

2. 配置Maven環境變數 - 修改/etc/profile

#解壓  -C 指定解壓目錄
sudo tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /usr/local/maven3
#複製Maven檔案路徑
# 如:/usr/local/maven3
sudo cp /etc/profile /etc/profile.bak
sudo vim /etc/profile
# 在profiles檔案末尾加上
# maven
export MAVEN_HOME=/usr/local/maven3
export PATH=$PATH:$MAVEN_HOME/bin

修改後重新登陸後生效

3. 配置Maven環境變數 - 使用/etc/profile.d資料夾

cd /etc/profile.d
sudo vim dev-soft-path.sh
# 新增Maven環境變數即可
export MAVEN_HOME=/usr/local/maven3
export PATH=$PATH:$MAVEN_HOME/bin

修改後重新登陸生效

4. 檢查配置是否生效

  • 修改profile類檔案:需要重新登入
  • 修改bashrc類檔案:當前會話只需要執行 source ~/.bashrc重新載入環境變數;新建立會話會自動載入。
# 執行mvn命令
$ mvn -version
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/maven3
Java version: xxxx, vendor: Oracle Corporation, runtime: xxxx
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "5.8.0-41-generic", arch: "amd64", family: "unix"

4、Maven配置修改

Maven預設的本地倉庫地址是/path/to/local/repo,遠端倉庫預設:http://my.repository.com/repo/path
所以如果使用預設的,會下載jar包特別慢。

  • 設定本地倉庫地址
  <localRepository>${HOME}/.repository</localRepository>
  • 新增國內Maven映象
<!-- 阿里雲倉庫服務:https://maven.aliyun.com/mvn/guide -->
		<mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>Alibaba</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>