(推薦讀)Linux(Ubuntu)下設定環境變數的各種方法 轉:

來源:互聯網
上載者:User

今天交叉編譯環境變數的設定,出現了點小小的錯誤,使我的終端總提示PATH出錯,讓我感受比較深一些,首先把我從網上看到的和我知道的總結來給大家分享一下。

環境變數是和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作業系統的不同,命名不一樣!!!!!!!!!!在我的Ubuntu裡面只有~/.profile),

執行的順序為:~/.bash_profile、 ~/.bash_login、 ~/.profile。
如果 ~/.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 LANG=zh_CN加入/etc/profile ,退出系統重新登入,登入提示顯示英文。
將/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
原因應該是jtw所說的使用者環境和系統內容的區別了
如果同一個變數在使用者環境(/etc/profile)和系統內容(/etc/environment)有不同的值那應該是以使用者環境為準了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.