首頁  >  文章  >  php教程  >  Linux 環境變數設定的幾種方法

Linux 環境變數設定的幾種方法

高洛峰
高洛峰原創
2016-12-15 16:57:091298瀏覽

環境變數是跟Shell緊密相關的,使用者登入系統後就啟動了一個Shell。對於Linux來說一般是bash,但也可以重新設定或切換到其它的 Shell。對於UNIX,可能是CShelll。環境變數是透過Shell指令來設定的,而設定好的環境變數又可以被所有目前使用者所執行的程式所使用。對於bash這個Shell程式來說,可以透過變數名稱來存取對應的環境變量,透過export來設定環境變數。下面透過幾個實例來說明。

1)etc/profile:此檔案為系統的每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行.
並從/etc/profile.d目錄的設定檔中蒐集shell的設定.
註:在這裡我們設定是為所有使用者可使用的全域變數。

2)/etc/bashrc:為每個執行bash shell的使用者執行此檔案.當bash shell被開啟時,該檔案被讀取.

3)~/.bash_profile:每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該檔案僅執行一次!預設情況下,他設定一些環境變數,執行使用者的.bashrc檔案.
註:~在LINUX下面是代表HOME這個變量的。
另外在不同的LINUX作業系統下,這個檔案可能是不同的,可能是~/.bash_profile; ~/.bash_login或~/.profile其中的一種或幾種,如果存在幾種的話,那麼執行的順序是:~/.bash_profile、 ~/.bash_login、 ~/.profile。例如我用的是Ubuntu,我的用戶資料夾下預設的只有~/.profile檔。

4)~/.bashrc:該檔案包含專用於你的bash shell的bash訊息,當登入時以及每次開啟新的shell時,該檔案被讀取.
(註:這個檔案是.開頭的,所以在資料夾中被隱藏了)
那麼我們要如何加入自己定義的環境變數呢?
用記事本打開這個文件,然後在裡面最後寫上:
xiaokang=kangkang
然後保存,這樣每次打開一個新的terminal的時候,我們這個變數就生效了。記住,如果你已經打開一個terminal,然後你修改了這個文件,那麼在這個terminal下是不會生效的。一般情況使用者最好在這裡進行修改,但是有時候會覆蓋父級的變量,例如PATH是ROOT設定的,但是如果你在這個文件裡面寫了PATH=xx,那麼將來所有的PATH都成了xx了,所以我們應該在這個文件中寫成:  
PATH=$PATH:xx
這樣就把原來的和你自己的一起加上了。而且注意在LINUX系統下用:分割表示並列,而不是windo的;
3和4都是在使用者目錄下的,他們唯一的不同是: .bash_profile只能在登入的時候啟動一次。在我的Ubuntu裡面這個3檔似乎沒有。

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

~/.bash_profile 是互動式、login 方式進入bash 運行的
~/​​.bashrc是互動式non-login 方式進入bash 運行的
通常二者設定大致相同,所以通常前者會呼叫後者。

好的,總結一下他們的執行方式:
當你登入並且登入shell是bash時,bash首先執行/etc/profile檔案中的命令(如果該檔案存在),然後它順序尋找~ /.bash_profile, ~/.bash_login或~/.profile檔,並執行找到的第一個可讀檔中的指令.當登入bash退出時,它將執行~/.bash_logout檔中的指令.
當啟動一個互動的bash時,它將執行~/.bashrc檔案中的命令(如果該檔案存在並且可讀).當非交互地啟動以運行一個shell腳本時,bash將查找bash_env環境變數,確定執行檔的名稱.


第二篇資料
-------------------------------------------- ------------------------------------

在登入Linux時要執行檔案的程序如下:
在剛登入Linux時,先啟動/etc/profile 文件,然後再啟動使用者目錄下的~/.bash_profile; ~/.bash_login或~/.profile檔案中的其中一個(根據不同的linux作業系統的不同,命名不一樣! !

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

因為在~/.bash_profile檔案中一般會有下面的程式碼:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
~/.bashrc中,一般還會有以下程式碼:
if [ -f /etc/bashrc ] ; then
. /bashrc
fi
所以,~/.bashrc會呼叫/etc/bashrc檔。最後,在退出shell時,也會執行 ~/.bash_logout檔。
執行順序為:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
關於各個檔案的作用域,在網路上找到了以下說明:
(1)/etc/profile: 此檔案為系統的每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行. 並從/etc/profile .d目錄的設定檔中蒐集shell的設定。
(2)/etc/bashrc: 為每一個執行bash shell的使用者執行此檔案.當bash shell被開啟時,該檔案被讀取。
(3)~/.bash_profile: 每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當使用者登入時,該檔案僅執行一次!預設情況下,他設定一些環境變數,執行使用者的.bashrc檔。
(4)~/.bashrc: 該檔案包含專用於你的bash shell的bash資訊,當登入時以及每次開啟新的shell時,該檔案被讀取。
(5)
~/.bash_logout:當每次退出系統(退出bash shell)時,執行該檔案.
另外,/etc/profile中設定的變數(全域)的可以作用於任何使用者,而~ /.bashrc等設定的變數(局部)只能繼承
/etc/profile中的變數,他們是"父子"關係。
(6)~/.bash_profile 是互動式、login 方式進入 bash 運行的~/.bashrc 是互動式 non-login 方式進入 bash 運行的通常二者設定大致相同,所以通常前者會呼叫後者。
/etc/profile和/etc/environment等各種環境變數設定檔的用處
先將export加入/etc/profile ,退出系統重新登錄,登入提示顯示英文。
將/etc/profile 中的export刪除,將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
原因應該是jtw所說的用戶環境和系統環境的區別了
如果同一個變數在使用者環境(/etc/profile)和系統環境(/etc/environment)有不同的值那應該是以使用者環境為準了。

更多Linux 環境變數設定的幾種方法相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn