1. 程式人生 > >Linux 常用環境變數及作用和環境變數檔案的詳細介紹及其載入執行順序

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命令的話,變數就不可以被修改或清除了



相關推薦

Linux 常用環境變數作用環境變數檔案詳細介紹及其載入執行順序

前言: 1. 環境變數是作業系統環境設定的變數,適用於整個系統的使用者程序; 2. 環境變數可以在命令中設定,但是使用者登出的時候將會丟失這些設定值; 3. 若要重複適用,則最好在.profile中

linux中PATH環境變數作用使用方法

關於PATH的作用: PATH說簡單點就是一個字串變數,當輸入命令的時候LINUX會去查詢PATH裡面記錄的路徑。比如在根目錄/下可以輸入命令ls,在/usr目錄下也可以輸入ls,但其實ls這個命令根本不在這個兩個目錄下,事實上當你輸入命令的時候LINUX會去/bin,/us

執行環境作用域、變數物件、作用域鏈、閉包

一:執行環境及作用域 和 變數物件 執行環境是javascript中最為重要的一個概念。每個執行環境都有一個與之關聯的變數物件(儲存執行環境中所有定義的變數和函式)。二: 當代碼在執行環境中執行時,會建立一個作用域鏈。作用域鏈本質是一個指向變數物件的指標列表。

linux下安裝JDE設定JAVA_HOME環境變數

1. 以root身份登入系統 2. 到java.sun.com去下載JDK for LINUX的rpm. 應該是個jdk-6-linux-i586-rpm.bin的檔案 3.通過chmod +x jdk-6-linux-i586-rpm.bin 命令使其獲得可執行許可權 4

Scala基礎-01-Scala環境安裝基礎語法(變數,函式)

Scala簡介 Scala是一種多正規化的程式語言,其設計的初衷是要整合面向物件程式設計和函數語言程式設計的各種特性。Scala運行於Java平臺(Java虛擬機器),併兼容現有的Java程式。Scala是編寫大資料框架Spark的語言,隨著大資料的興起,越來

Linux系列教程(九)——Linux常用命令之網絡關機重啟命令

route 註意 端口號 post rac pos 名稱 window ebo   前一篇博客我們講解了Linux壓縮和解壓縮命令,使用的最多的是tar命令,因為現在很多源碼包都是.tar.gz的格式,通過 tar -zcvf 能完成解壓。然後對於.zip格式的文件,使用g

Linux常用命令系列——文件目錄操作命令(ls)

4.3 data 字段 符號鏈接 功能 數值 sdp 用戶 不同 文章目錄: 1.語法 2.選項 3.參數 4.實例 5.ls -F命令的擴展知識 6.ls 命令輸出內容的屬性 ls命令 ls(可以理解為list的縮寫)

Linux學習命令匯總十——linux網絡管理配置網絡檢測工具

網絡配置 網絡管理 網絡檢測 ifconfig ip 本章Blog相關Linux知識點CSMA/CD(Carrier Sense Multiple Access with Collision Detection)基帶沖突檢測的載波監聽多路訪問技術(載波監聽多點接入/碰撞檢測),是一種爭用型

Linux常用服務器搭建sshscp

ssh scp 1.ssh 1.1ssh介紹 SSH(Secure Shell),由IETF的網絡工作小組Network Working Group制定,ssh是建立在應用層和傳輸層基礎上的安全協議。 SSH是專為遠程登錄會話和其他網絡服務提供安全性的協議,常用於遠程登錄以及用戶之間的資料拷貝。 SS

Linux中引號的一些作用它們的區別以及檢查端口的一些命令與方法

雙引號 linux 檢查 ssh tracert 分享 inux 們的 不同 今天分享一下Linux中單引號、雙引號、反引號的區別,單引號的作用就是 單引號裏面的內容會原封不動的輸出 (所見所得),雙引號 與單引號類似 不同的就是裏面的特殊符號會被解析(運行),反引號 優先

Linux常用終端命令擴充套件

1.Linux終端命令的格式2.查詢終端命令的幫助資訊  command --help  man(manual手冊) command   man命令操作格式 f向前翻頁 b向後翻頁 空格向後翻頁 enter每行翻頁 q退出3.檔案和目錄常用命令  終端實用技巧

Linux常用終端命令擴展

查詢 通配符 cd命令 rm命令 復制 mkdir -p 樹狀 擴展 藍色 1.Linux終端命令的格式2.查詢終端命令的幫助信息 command --help man(manual手冊) command man命令操作格式 f向前翻頁 b向後翻頁 空格向後翻頁 e

Linux常用終端命令擴充套件(六)

1.find命令格式:find(路徑) -name "條件" #如果不指定路徑,預設在所在目錄查詢  #注意與萬用字元的聯合使用2.檔案軟連線 ln -s 被連線的原始檔(目標路經) 連結檔案#建立檔案連結,用通俗地方式講類似於windows  #下的快捷方式 #沒有-s建立的是一個硬連結

Linux常用終端命令擴充套件(七)

1.通過apt安裝、解除安裝軟體  安裝軟體:sudo apt install 軟體包  解除安裝軟體:sudo apt remove 軟體名  更新已安裝的包: sudo apt upgrade2.Ubuntu配置軟體源:Ubuntu中有一個主伺服器,所有的軟體安裝包都儲存在裡

Linux常用終端命令擴充套件(八)

注意:以下命令均為vi文字下使用1.移動 vi中使用空行來區分段落 {上一段 }下一段  在程式開發是,通常一段功能相關的程式碼會寫在一起--之間沒有空行  括號切換 %括號匹配及切換 在程式世界裡(){}【】使用頻率很高,而且都是成對出現的2.選中文字(可視模式)學習複製命令之前,應該學

linux ELK(filebeat)環境搭建中加入kafka訊息佇列的詳細介紹(菜鳥新手級別)

        本文所使用的軟體版本如下filebeat 5.4.0,elasticsearch 5.4.0,kibana 5.4.0, 最近公司需要做實時日誌分析系統,在網上查了很多資料,發現ELK是最適合的,而且是開源,官方文件還算詳細。          儘管ELK環

Java SE 9(JDK9)環境安裝互動式程式設計環境Jshell使用示例

目的 安裝JDK 9, 練習Jshell工具的使用, 體驗Java的互動式程式設計環境。 什麼是Jshell 其實就是一個命令列工具,安裝完JDK9後,可以在bin目錄下找到該工具,與Python的直譯器極其相似,用過Python直譯器的人應該會非常熟悉。 它可以讓你體驗互

php基礎--變數作用

php變數定義規則 變數必須以$符號開頭,後面接變數名 變數名必須以字母或者下劃線開頭 變數名只能包含字母數字和下劃線(A-z,0-9和_) 變數名不能包含空格 變數名區分大小寫 建立變數 在php中,不必事先宣告變數,在給變數賦值的時候被建立

js的變數作用域,區域性變數,全域性變數,全域性區域性變數重名

一、變數的作用域:  變數起作用的範圍,變數在啥地方能用。那麼啥地方就是它的作用域。二、變數作用域分為:區域性變數和全域性變數。1、區域性變數://就是定義在函式內部的變數(內部變數),區域性變數起作用的範圍是函式內部。//區域性變數就是私有的變數2、全域性變數://就是定義

Linux程序通訊[2]-互斥鎖條件變數

概述 上一篇介紹了共享記憶體,已經屬於比較高階的層次。本篇介紹一下多執行緒/多程序最基礎的問題,同步。 為了允許線上程或程序間共享資料,同步常常是必需的,也就是我們常說要用鎖(當然鎖通常也是效能瓶頸,現在無鎖架構正在越發流行)。互斥鎖和條件變數則是同步的基本組成部分。互斥鎖和條件變數在同一程序下的所有