Linux環境變數
1、環境變數的概念
1.1 環境變數的含義
環境變數一般是指作業系統中指定作業系統執行環境的一些引數。它相當於一個指標,想要檢視變數的值,需要加上“$”。
1.2 環境變數的分類
1.2.1 按作用的範圍分
在Linux中的變數,可以分為環境變數和本地變數:
1)環境變數:相當於全域性變數,存在於所有的Shell中,具有繼承性;
2)本地變數:相當於區域性變數只存在當前Shell中,本地變數包含環境變數,非環境變數不具有繼承性。
1.2.2 按生存週期分
1)永久:需要修改配置檔案,變數永久生效;
2)暫時:使用export定義,關閉Shell後失效。
2、環境變數的組織方式
每個程式都有一張環境表,環境表是一個字元指標陣列,每個指標指向一個以‘\0’結尾的環境字串。Main函式的第三個引數就是環境表地址。
3、常見的環境變數
3.1 PATH
該變數指定命令的搜尋路徑。
【例】
釋:從中可以看出,在當前目錄下,PATH的值。它表示在當前目錄下執行的每一條指令的搜尋路徑,每個目錄以冒號隔開。當執行一條指令時,系統就會從系統檔案中去尋找,找到了就執行;否則不執行。
3.2 HOME
該變數指定使用者的主工作目錄,即使用者登入到Linux系統時,預設的目錄。
3.2.1 普通使用者下的主工作目錄
【例】
3.2.2 超級使用者下的主工作目錄
【例】
釋:環境變數是一個變數,它的值隨著使用者的不同而不同。
3.3 HISTSIZE
該變數指定儲存歷史命令的數目。
【例】
釋:在Linux系統中最多儲存1000條命令記錄。
3.4 LOGNAME
該變數指定顯示使用者的登入名。
【例】
3.5 HOSTNAME
該變數指定主機名
【例】
3.6 SHELL
該變數指定使用者當前使用的解析器。
【例】
4、修改和顯示環境變數的命令
4.1 echo
該命令用於顯示某個環境變數的值。
4.2 env
該命令指定顯示所有的環境變數和值。
【例】
4.3 set
該命令指定本地變數。
【例】
4.4 export
該命令指定設定一個新的環境變數。
【例】
注意:環境變數一般用英文字母大寫加下劃線表示。
4.5 unset
該命令指定清除環境變數。
【例】
4.6 readonly
該命令用於設定只讀環境變數。
【例】
釋:將環境變數MY_ENV設定為只讀模式後,就不能在對它進行修改了,直到使用者退出登入後才失效。
5、存放環境變數的檔案
5.1 /etc/profile
該檔案的作用是當用戶登入時獲取系統的環境變數,只獲取一次。
5.2 /etc/bashrc
當執行完/etc/profile檔案後,使用者想開啟bash Shell就會讀取該檔案。如果想每次開啟bash Shell後都執行某些操作,可以在該檔案中設定。
5.3 ~/.bash_profile
每個使用者都可使用該檔案輸入專用於自己使用的shell資訊。當用戶登入時,該檔案僅僅執行一次,預設情況下,它設定一些環境變數,執行使用者的.bashrc檔案。
單個使用者此檔案的修改只會影響到他以後的每一次登陸系統。因此,可以在這裡設定單個使用者的特殊的環境變數或者特殊的操作,那麼它在每次登陸的時候都會去獲取這些新的環境變數或者做某些特殊的操作,但是僅僅在登陸時。
5.4 ~/.bashrc
該檔案包含專用於單個人的bash shell的bash資訊,當登入時以及每次開啟一個新的shell時,該該檔案被讀取。
單個使用者此檔案的修改會影響到他以後的每一次登陸系統和每一次新開一個bash。因此,可以在這裡設定單個使用者的特殊的環境變數或者特殊的操作,那麼每次它新登陸系統或者新開一個bash,都會去獲取相應的特殊的環境變數和特殊操作。
5.5 ~/.bash_logout
當每次退出系統(退出bash shell)時,執行該檔案。
6、通過程式碼獲取環境變數
【例1】
注:命令列第3個引數是環境表地址,是一個字元型陣列指標。
執行結果:
【例2】通過第三方變數environ獲取
執行結果:
注意:libc中定義的全域性變數environ指向環境變量表,因為environ沒有包含在任何標頭檔案中,所以在使用時要用extern宣告。
7、通過系統呼叫獲取或設定環境變數
通常用getenv和putenv函式來訪問特定的環境變數,而不是用environ變數。但是,如果要檢視整個環境,則必須使用environ指標。
【例1】
執行結果:
【例2】
執行結果:
釋:“export MY_ENV=Love”匯出環境變數,可以被子程式繼承下去;而“MY_ENV=Love”匯出的是普通變數,不具有繼承性(與getenv函式一樣)。