etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc等配置文件區別

首先要弄明白什麼是交互式shell和非交互式shell,什麼是login shell 和non-login shell。 shell

交互式模式就是shell等待你的輸入,而且執行你提交的命令。這種模式被稱做交互式是由於shell與用戶進行交互。這種模式也是大多數用戶很是熟悉的:登陸、執行一些命令、簽退。當你簽退後,shell也終止了。bash

非交互式模式。在這種模式下,shell不與你進行交互,而是讀取存放在文件中的命令,而且執行它們。當它讀到文件的結尾,shell也就終止了。ssh

login shell就是須要輸入用戶名及密碼登陸的shell,如開機shell登錄、ssh登錄、su - username(從root切換到其餘用戶時無需密碼)。繼承

non-login shell無需輸入密碼,如bash、su username、圖形界面打開bash。進程

 

/etc/profile:此文件爲系統的每一個用戶設置環境信息,當用戶第一次登陸時,該文件被執行並從/etc/profile.d目錄的配置文件中搜集shell的設置。登錄

/etc/bashrc:爲每個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取。變量

~/.bash_profile:每一個用戶均可使用該文件輸入專用於本身使用的shell信息,當用戶登陸時,該文件僅僅執行一次!默認狀況下,他設置一些環境變量,執行用戶的.bashrc文件。 

~/.bash_login:若bash是以login方式執行時,讀取~/.bash_profile,若它不存在,則讀取~/.bash_login,若前二者不存在,讀取~/.profile。配置

~/.profile:若bash是以login方式執行時,讀取~/.bash_profile,若它不存在,則讀取~/.bash_login,若前二者不存在,讀取~/.profile.另外,圖形模式登陸時,此文件將被讀取,即便存在~/.bash_profile和~/.bash_login。file

 ~/.bashrc:該文件包含專用於你的bash shell的bash信息,當登陸時以及每次打開新的shell時,該該文件被讀取。終端

~/.bash_logout:當每次退出系統(退出bash shell)時,執行該文件。也就是說,在文本模式註銷時,此文件會被讀取,圖形模式註銷時,此文件不會被讀。

 
下面是在本機的幾個例子: 

首先須要明確的是,讀取~/.bash_profile,該文件便會去讀取~/.bashrc,而~/.bashrc又會去讀取/etc/bashrc。因此只要讀取~/.bash_profile,便會同時讀取~/.bashrc與/etc/bashrc。

1. 圖形模式登陸時,順序讀取:/etc/profile和~/.profile。

2. 圖形模式登陸後,打開終端時,順序讀取:~/.bashrc和/etc/bashrc。

3. 文本模式登陸時,順序讀取:/etc/profile,~/.bash_profile,~/.bashrc和/etc/bashrc。 

4. 從其它用戶su到該用戶,則分兩種狀況:    

   (1)若是帶-l參數(或-參數,--login參數),如:su -l username,則bash是lonin的,它將順序讀取如下配置文件:/etc/profile,~/.bash_profile,~/.bashrc和/etc/bashrc。    

   (2)若是沒有帶-l參數,則bash是non-login的,它將順序讀取:~/.bashrc和/etc/bashrc並從父進程繼承其環境變量。

5. 註銷時,或退出su登陸的用戶,若是是longin方式,那麼bash會讀取:~/.bash_logout

6. 執行自定義的shell文件時,若使用「bash -l a.sh」的方式,則bash會讀取行:/etc/profile,~/.bash_profile,~/.bashrc和/etc/bashrc,用sh -l a.sh調用bash,它將會執行/etc/profile以及 ~/.profile。若使用其它方式,如:bash a.sh, ./a.sh,sh a.sh,則不會讀取上面的任何文件,只能從其父進程處繼承環境變量,像alias等就沒法繼承使用了。

7. 上面的例子凡是讀取到~/.bash_profile的,若該文件不存在,則讀取~/.bash_login,若前二者不存在,讀取~/.profile。  

相關文章
相關標籤/搜索