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

什麼是交互式shell和非交互式shell,什麼是login shell 和non-login shell。 html

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

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

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

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

bashrc用於交互式non-login shell,而profile用於交互式login shell。系統中存在許多bashrc和profile文件 htm

 

 

交互式登陸(login)模式:主要用來設置一些系統變量blog

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

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

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

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

交互式非登陸(non login)模式:主要用來保存一些bash的設置

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

 ~/.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。 

轉至http://www.javashuo.com/article/p-npgbaimy-x.html

相關文章
相關標籤/搜索