1. 程式人生 > >淺析linux下的/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc檔案

淺析linux下的/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc檔案

/etc/profile:此檔案為系統的每個使用者設定環境資訊,當用戶第一次登入時,該檔案被執行, 並從/etc/profile.d目錄的配置檔案中搜集shell的設定.

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

~/.bash_profile:每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當用戶登入時,該檔案僅僅執行一次!預設情況下,他設定一些環境變數,執行使用者的.bashrc檔案. 


~/.bashrc:該檔案包含專用於你的bash shell的bash資訊,當登入時以及每次開啟新的shell時該檔案被讀取.

 
~/.bash_logout:當每次退出系統(退出bash shell)時,執行該檔案. 
 

另外,/etc/profile中設定的變數(全域性的)可以作用於任何使用者,而~/.bashrc等中設定的變數(區域性)只能繼承/etc/profile中的變數,他們是"父子"關係. 
 ~/.bash_profile 是互動式、login 方式進入 bash 執行的  /.bashrc 是互動式 non-login 方式進入 bash 執行的 

 通常二者設定大致相同,所以通常前者會呼叫後者。 
 
 bash的幾個初始化檔案 - [Ubuntu] 

(1)/etc/profile 
 
全域性(公有)配置,不管是哪個使用者,登入時都會讀取該檔案。

 
(2)/ect/bashrc 
 
Ubuntu沒有此檔案,與之對應的是/ect/bash.bashrc 
 
它也是全域性(公有)的 
 
bash執行時,不管是何種方式,都會讀取此檔案。 
 
 
 
(3)~/.profile
 
若bash是以login方式執行時,讀取~/.bash_profile,若它不存在,則讀取~/.bash_login,若前兩者不存在,讀取~/.profile。 
 
另外,圖形模式登入時,此檔案將被讀取,即使存在~/.bash_profile和~/.bash_login。 
 
(4)~/.bash_login 
 
若bash是以login方式執行時,讀取~/.bash_profile,若它不存在,則讀取~/.bash_login,若前兩者不存在,讀取~/.profile。 
 
(5)~/.bash_profile 
 
Unbutu預設沒有此檔案,可新建。 
 
只有bash是以login形式執行時,才會讀取此檔案。通常該配置檔案還會配置成去讀取~/.bashrc。 
 
(6)~/.bashrc 
 
當bash是以non-login形式執行時,讀取此檔案。若是以login形式執行,則不會讀取此檔案。 
 
(7)~/.bash_logout 
 
登出時,且是longin形式,此檔案才會讀取。也就是說,在文字模式登出時,此檔案會被讀取,圖形模式登出時,此檔案不會被讀取。

下面是在本機的幾個例子: 
 
1. 圖形模式登入時,順序讀取:/etc/profile和~/.profile 
 
2. 圖形模式登入後,開啟終端時,順序讀取:/etc/bash.bashrc和~/.bashrc 
 
3. 文字模式登入時,順序讀取:/etc/bash.bashrc,/etc/profile和~/.bash_profile 
 
4. 從其它使用者su到該使用者,則分兩種情況: 
 
    (1)如果帶-l引數(或-引數,--login引數),如:su -l username,則bash是lonin的,它將順序讀取以下配置檔案:/etc/bash.bashrc,/etc/profile和~/.bash_profile。 
 
    (2)如果沒有帶-l引數,則bash是non-login的,它將順序讀取:/etc/bash.bashrc和~/.bashrc 
 
5. 登出時,或退出su登入的使用者,如果是longin方式,那麼bash會讀取:~/.bash_logout 
 
6. 執行自定義的shell檔案時,若使用“bash -l a.sh”的方式,則bash會讀取行:/etc/profile和~/.bash_profile,若使用其它方式,如:bash a.sh, ./a.sh,sh a.sh(這個不屬於bash shell),則不會讀取上面的任何檔案。 
 
7. 上面的例子凡是讀取到~/.bash_profile的,若該檔案不存在,則讀取~/.bash_login,若前兩者不存在,讀取~/.profile。 
 
 
 
linux中profile與bashrc的區別 
 
Ubuntu 的相關目錄下 
 
/ect/ /root /home/myuser 
 
profile .profile .profile 
 
bash.bashrc .bashrc .bashrc 
 
profile.d 
 
 
 
Fedora的相關目錄 
 
/ect/ /root /home/myuser 
 
profile      profile 
 
bashrc   .bashrc bashrc 
 
profile.d                     profile.d

 
說明:myuser 是你新增建立的使用者 
 
在網上找了半天也不能包括所有的,所以只能比較個大概。 
 
 
 
bashrc與profile的區別 
 
 
 
要搞清bashrc與profile的區別,首先要弄明白什麼是互動式shell和非互動式shell,什麼是login shell 和non-login shell。 
 
 
 
互動式模式就是shell等待你的輸入,並且執行你提交的命令。這種模式被稱作互動式是因為shell與使用者進行互動。這種模式也是大多數使用者非常熟悉的:登入、執行一些命令、簽退。當你簽退後,shell也終止了。 shell也可以執行在另外一種模式:非互動式模式。在這種模式下,shell不與你進行互動,而是讀取存放在檔案中的命令,並且執行它們。當它讀到檔案的結尾,shell也就終止了。 
 
 
 
bashrc與profile都用於儲存使用者的環境資訊,bashrc用於互動式non-loginshell,而profile用於互動式login shell。系統中存在許多bashrc和profile檔案,下面逐一介紹: 
 
 
 
/etc/pro此檔案為系統的每個使用者設定環境資訊,當第一個使用者登入時,該檔案被執行. 
 
 
 
並從/etc/profile.d目錄的配置檔案中搜集shell的設定. 
 

/etc/bashrc:為每一個執行bash shell的使用者執行此檔案.當bash shell被開啟時,該檔案被讀取。有些linux版本中的/etc目錄下已經沒有了bashrc檔案。 
 
 
 
~/. pro每個使用者都可使用該檔案輸入專用於自己使用的shell資訊,當用戶登入時,該 
 
 
 
檔案僅僅執行一次!預設情況下,它設定一些環境變數,然後執行使用者的.bashrc檔案. 
 
 
 
~/.bashrc:該檔案包含專用於某個使用者的bash shell的bash資訊,當該使用者登入時以及每次開啟新的shell時,該檔案被讀取. 
 
 
 
另外,/etc/profile中設定的變數(全域性)的可以作用於任何使用者,而~/.bashrc等中設定的變數(區域性)只能繼承/etc/profile中的變數,他們是"父子"關係. 
 
 
 
某網友總結如下:

 
/etc/profile,/etc/bashrc 是系統全域性環境變數設定 
 
~/.profile,~/.bashrc使用者家目錄下的私有環境變數設定 
 
當登入系統時候獲得一個shell程序時,其讀取環境設定檔有三步 
 
1首先讀入的是全域性環境變數設定檔/etc/profile,然後根據其內容讀取額外的設定的文件,如 
 
/etc/profile.d和/etc/inputrc 
 
2然後根據不同使用者帳號,去其家目錄讀取~/.bash_profile,如果這讀取不了就讀取~/.bash_login,這個也讀取不了才會讀取 
 
~/.profile,這三個文件設定基本上是一樣的,讀取有優先關係 
 
3然後在根據使用者帳號讀取~/.bashrc 
 
至於~/.profile與~/.bashrc的不區別 
 
都具有個性化定製功能 
 
~/.profile可以設定本使用者專有的路徑,環境變數,等,它只能登入的時候執行一次 
 
~/.bashrc也是某使用者專有設定文件,可以設定路徑,命令別名,每次shell script的執行都會使用它一次 
 
作者 huhao1989

本文來源:華夏聯盟網[http://www.hx95.com]