Linux 常用環境變量及作用和環境變量文件的詳細介紹及其加載執行順序

前言

1. 環境變量是操作系統環境設置的變量,適用於整個系統的用戶進程;

2. 環境變量可以在命令中設置,但是用戶註銷的時候將會丟失這些設置值;

3. 若要重複適用,則最好在.profile中定義;環境變量的使用與本地變量的使用方法相同,

4. 但是在使用之前,必須用export命令導出。


一、環境變量文件介紹  

Linux中環境變量包括系統級和用戶級,系統級的環境變量是每個登錄到系統的用戶都要讀取的系統變量,而用戶級的環境變量則是該用戶使用系統時加載的環境變量,所以管理環境變量的文件也分爲系統級和用戶級的。

二、Linux的變量種類

按變量的生存週期來劃分,Linux變量可分爲兩類:

1.永久的:需要修改配置文件,變量永久生效

2.臨時的:使用export命令聲明即可,變量在關閉shell時失效

三、Linux 環境變量文件

linux變量文件有/etc/environment 或 /etc/profile 或 ~/.profile 或 /etc/bash.bashrc 或 ~/.bashrc, 以及~/.bash_profile(一般是用戶在自己目錄下新建的),~/.bash_logout.

系統級:

1./etc/environment:是系統在登錄時讀取的第一個文件,該文件設置的是整個系統的環境,只要啓動系統就會讀取該文件,用於爲所有進程設置環境變量。系統使用此文件時並不是執行此文件中的命令,而是根據而是根據KEY=VALUE模式的代碼,對KEY賦值以VALUE,因此文件中如果要定義PATH環境變量,只需加入一行形如 PATH=$PATH:/xxx/bin的代碼即可

2./etc/profile:此文件是系統登錄時執行的第二個文件。 爲系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行。並從/etc/profile.d目錄的配置文件中搜集shell的設置。(/etc/profile可以用於設定針對全系統所有用戶的環境變量,環境變量週期是永久性)

3. /etc/bashrc:是針對所有用戶的bash初始化文件,在此中設定的環境變量將應用於所有用戶的shell中,此文件會在用戶每次打開shell時執行一次。(即每次新開一個終端,都會執行/etc/bashrc)。

用戶級(這些文件處於家目錄下):

1. ~/.profile:對應當前登錄用戶的profile文件,用於定製當前用戶的個人工作環境(變量是永久性),每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的.bashrc文件。這裏是推薦放置個人設置的地方

2.~/.bashrc:該文件包含專用於你的bash shell的bash信息,當登錄時以及每次打開新的shell時,該文件被讀取。(~/.bashrc只針對當前用戶,變量的生命週期是永久的)

不推薦放到這兒,因爲每開一個shell,這個文件會讀取一次,效率肯定有影響。

3.~/.bash_profile or ~./bash_login:~/.bash_profile是交互式login 方式進入 bash 運行的,~/.bashrc 是交互式 non-login 方式進入 bash 運行的通常二者設置大致相同,所以通常前者會調用後者。每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次。默認情況下,他設置一些環境變量,執行用戶的.bashrc文件。(如果~/目錄下沒有.bash_profile則新建立一個)這裏是推薦放置個人設置的地方

當一個shell關閉時,在bash_profile中定義的系統變量則會失效。因此,每打開一個新的shell時都要運行一次source bash_profile.而且針對當前用戶。

4.~/.pam_environment:用戶級的環境變量設置文件,沒有做測試,不知道管不管用。

5.~/.bash_logout:當每次退出系統(退出bash shell)時,執行該文件。另外,/etc/profile中設定的變量(全局)的可以作用於任何用戶,而~/.bashrc等中設定的變量(局部)只能繼承 /etc/profile中的變量,他們是"父子"關係。

四、Linux 環境變量文件執行順序

1. 在登錄Linux時要執行文件的過程如下:

在剛登錄Linux時,

首先啓動 /etc/profile 文件,

然後再啓動用戶目錄下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一個,用戶主目錄下文件的執行的順序爲:

          ~/.bash_profile -> ~/.bash_login -> ~/.profile。

  

如果 ~/.bash_profile文件存在的話,一般還會執行 ~/.bashrc文件。

因爲在 ~/.bash_profile文件中一般會有下面的代碼:

if [ -f ~/.bashrc ] ; then
   . ./bashrc
fi

~/.bashrc中,一般還會有以下代碼:

if [ -f /etc/bashrc ] ; then
   . /etc/bashrc
fi

所以,~/.bashrc會調用 /etc/bashrc文件。最後,在退出shell時,還會執行 ~/.bash_logout文件。

執行順序爲: /etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

/etc/profile和/etc/environment等各種環境變量設置文件的用處

1)先將export LANG=zh_CN加入/etc/profile,退出系統重新登錄,登錄提示顯示英文。

2)先將/etc/profile 中的export LANG=zh_CN刪除,將LNAG=zh_CN加入/etc/environment,退出系統重新登錄,登錄提示顯示中文。

用戶環境建立的過程中總是先執行/etc/profile,然後再讀取/etc/environment。

爲什麼會有如上所敘的不同呢?而不是先執行/etc/environment,後執行/etc/profile呢?

這是因爲: /etc/environment是設置整個系統的環境,而/etc/profile是設置所有用戶的環境,前者與登錄用戶無關,後者與登錄用戶有關。

系統應用程序的執行與用戶環境可以是無關的,但與系統環境是相關的,所以當你登錄時,你看到的提示信息,如日期、時間信息的顯示格式與系統環境的LANG是相關的,缺省LANG=en_US,如果系統環境LANG=zh_CN,則提示信息是中文的,否則是英文的。

對於用戶的shell初始化而言是先執行/etc/profile,再讀取文件/etc/environment;對整個系統而言是先執行/etc/environment。這樣理解正確嗎?

登陸系統時的順序應該是:

/etc/enviroment --> /etc/profile -->HOME/.profile>HOME/.env (如果存在)

/etc/profile 是所有用戶的環境變量

/etc/enviroment是系統的環境變量

登陸系統時shell讀取的順序應該是:

/etc/profile ->/etc/enviroment -->HOME/.profile−−>HOME/.env

原因應該是用戶環境和系統環境的區別了,如果同一個變量在用戶環境(/etc/profile)和系統環境(/etc/environment)有不同的值,那應該是以用戶環境爲準了。

五、Linux中常見的環境變量及其作用

Linux中常見的環境變量有:

1.PATH:指定命令的搜索路徑

2.HOME:指定用戶的主工作目錄(即用戶登陸到Linux系統中時,默認的目錄)

3.HISTSIZE:指保存歷史命令記錄的條數。

4.LOGNAME:指當前用戶的登錄名。

5.HOSTNAME:指主機的名稱,許多應用程序如果要用到主機名的話,通常是從這個環境變量中來取得的。

6.SHELL:指當前用戶用的是哪種Shell。

7.LANG/LANGUGE:和語言相關的環境變量,使用多種語言的用戶可以修改此環境變量。

8.MAIL:指當前用戶的郵件存放目錄。

9.PS1:命令基本提示符,對於root用戶是#,對於普通用戶是$。

10.PS2:附屬提示符,默認是“>”。

備註:可以通過修改此環境變量來修改當前的命令符,比如下列命令會將提示符修改成字符串“Hello,MyNewPrompt ”。

  # PS1="Hello,My NewPrompt"

注意:上述變量的名字並不固定,如HOSTNAME在某些Linux系統中可能設置成HOST

當然,我所列舉的上述環境變量並非窮盡列出!

Linux也提供了修改和查看環境變量的命令!下面通過幾個實例來說明:

1.echo 顯示某個環境變量值 echo $PATH

2.export 設置一個新的環境變量 export HELLO="hello" (可以無引號),在shell的命令行下直接使用[export 變量名=變量值] 定義變量,該變量只在當前的shell(BASH)或其子shell(BASH)下是有效的,shell關閉了,變量也就失效了,再打開新shell時就沒有這個變量,需要使用的話還需要重新定義。

3.env 顯示所有環境變量

4.set 顯示本地定義(系統中已經存在)的shell變量以及設置shell變量的新變量值,如果未指定值,則該變量值將被設爲NULL。

5.unset 清除環境變量 unset HELLO

6.readonly 設置只讀環境變量 readonly HELLO ,如果使用了readonly命令的話,變量就不可以被修改或清除了



發佈了37 篇原創文章 · 獲贊 30 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章