浅谈bash shell的种类以及linux系统中的profile和bashrc配置文件
相信不少玩過linux的人,看到諸如~/.bash_profile、~/.bashrc、~/.profile、/etc/profile、/etc/bashrc之類的文件,都會有似曾相識的感覺,依稀記得配置什么參數或者路徑的時候用過這些文件,又或者是修改系統設置的時候改過它們。也有厲害一點的,能指出這些文件其實可以分為兩個類別,分別是bashrc和profile,它們都是用來配置環境變量的,當你安裝了一些開發工具的時候就要修改這些文件來使得安裝的內容能夠全局生效。但是,如果要詳細的分析一下bashrc和profile究竟是個什么東東,上面這些文件各自的作用,各自的區別,又是否能解釋的清楚呢?不急,下面我們就來詳細展開。
一、shell的種類
要徹底搞清上面這些個文件的含義和作用,首先要弄明白什么是interactive shell(交互式shell)和non-interactive shell(非交互式shell),什么是login shell(登入式shell)和non-login shell(非登入式shell)。
-
interactive shell(交互式shell)就是shell等待你的輸入,并且執行你提交的命令。這種模式被稱作交互式是因為shell與用戶進行交互。這種模式也是大多數用戶非常熟悉的:登錄、執行一些命令、簽退。當你簽退后,shell也終止了。
-
除了上述的交互式模式,shell也可以運行在另外一種模式:non-interactive shell(非交互式shell)。在這種模式下,shell不與你進行交互,而是讀取存放在文件中的命令并且執行它們。當它讀到文件的結尾,shell也就終止了。
-
login shell(登入式shell)指的是在取得bash時需要完整的登陸流程。什么時候取得bash呢?當然就是用戶登陸的時候。當你在tty1~tty6登陸時,系統會叫你輸入賬號和密碼,此時取得的bash就是一種login shell。
-
non-login shell(非登入式shell)就是取得bash不需要重復登錄,就像你在桌面視圖中用ctrl+alt+T啟動的shell輸入窗口就是non-login shell。還有就是你在shell窗口直接su切換的用戶,都屬于non-login shell。
這兩種分類方法是交叉的,也就是說一個login shell可能是一個interactive shell,也可能是個non-interactive shell。
interactive shell(交互式shell)和non-interactive shell(非交互式shell)其實很好理解,無非就是有沒有一個顯式的交互界面。比較難理解的是login shell(登入式shell)和non-login shell(非登入式shell)。根據網上牛人的總結,login shell與non-login shell的主要區別在于它們啟動時會讀取不同的配置文件,從而導致各自工作的環境不一樣。
-
login shell啟動時首先讀取/etc/profile全局配置,然后依次查找/.bash_profile、/.bash_login、~/.profile三個配置文件,并且讀取第一個找到的并且可讀的文件。login shell退出時讀取并執行~/.bash_logout中的命令。
-
交互式的non-login shell啟動時讀取/.bashrc資源文件。如果我們修改了我們的/.bashrc如果想讓配置立即生效,我們只需要用source命令。例如:$ source ~/.bashrc;
-
非交互式的non-login shell則不讀取上述所有配置文件,而是查找環境變量BASH_ENV,讀取并執行BASH_ENV指向的文件中的命令;
這樣一對比,詳細大家應該就比較清楚了。
二、bashrc與profile文件
下面我們就來談談bashrc與profile文件。bashrc與profile都用于保存用戶的環境信息:
-
bashrc用于交互式non-login shell;
-
profile用于交互式login shell;
如上所述,系統中一般會存在多個bashrc和profile文件,下面逐一介紹:
-
文件【/etc/profile】:為系統的每個用戶設置環境信息。當系統第一個用戶登錄時,該文件被執行;
-
文件【/etc/bashrc】:為每一個運行bash shell的用戶設置環境信息。當bash shell被打開時,該文件被執行;
-
文件【~/.profile】:每個用戶都可使用該文件輸入專用于自己使用的shell信息,該文件僅僅在用戶登錄的時候執行一次,以后就不再執行,除非你登出之后再重新登錄。默認情況下,它設置一些環境變量,然后執行用戶的.bashrc文件;
-
文件【~/.bashrc】:包含專用于某個用戶的bash shell的bash信息,當該用戶登錄時以及每次打開新的shell時,該文件被讀取;
另外,/etc/profile中設定的變量的可以作用于任何用戶,是全局變量,而~/.bashrc等中設定的變量只能繼承/etc/profile中的變量,是局部變量,他們是"父子"關系;
也可以這么解釋:
- 文件【/etc/profile】和【/etc/bashrc】用于設定系統全局的環境變量 ;
- 文件【/.profile】和【/.bashrc】用于設定單個用戶的私有環境變量;
當登入系統時候獲得一個shell進程時,其讀取環境設定檔有三步:
【/etc/profile.d】和【/etc/inputrc】;
總結
以上是生活随笔為你收集整理的浅谈bash shell的种类以及linux系统中的profile和bashrc配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全民k歌怎么发起合唱邀请
- 下一篇: 如何理解和分析linux系统的CPU平均