1. 程式人生 > >Linux bash中環境配置以及配置檔案的讀取順序

Linux bash中環境配置以及配置檔案的讀取順序

在Linux中系統有一些環境配置檔案,讓bash在啟動是直接讀取這些配置檔案,以規劃好bash的操作環境。配置檔案可分為全體的配置檔案以及使用者個人偏好配置檔案。像 login 與 non-login shell 的概念 以及 各種配置檔案的讀取順序,我經常忘記,所有參考了《鳥哥的Linux私房菜》記錄一下,方便以後查閱。

login 與 non-login shell

  • login shell: 取得 bash 是需要完整的登入流程,就稱為 login shell。例如,你要有 tty1~tty6 登入,需要輸入使用者的賬號與密碼,此時取得的 bash 就稱為 login shell
  • non-login shell:取得 bash 介面的方法不需要重複登入的操作。例如,①你以 X widow 登入 Linux後,在以 X 圖形化介面啟動終端機,此時那個終端並沒有需要再次輸入賬號和密碼,那個 bash 的環境就稱 non-login shell 。② 你原本的 bash 環境下再次下達 bash 這個指令,同樣的也沒有輸入賬號和密碼,那第二個 bash(子程式)也是 non-login shell。

介紹 login 和 non-login shell 是因為這兩個取得 bash 的情況下,讀取的配置檔案資料並不一樣所致。

我們先來談談 login shell 。一般來說 login shell 會讀取兩個配置檔案:
1./etc/profile:

這是系統整體的設定,最好不要修改這個檔案;
2.~/.bash_profile~/.bash_login~/.profile:屬於使用者個人設定,你要改自己的資料,可以寫在這裡。
好開始聊聊這兩個檔案吧。

/etc/profile(login shell 才會讀)

可以使用 vim 去閱讀這個檔案的內容,這個配置檔案可以利用使用者的識別符號(UID)來決定很多重要的變數資料,這也是每個使用者登入取得 bash 時一定會讀取的檔案,所以如果你想要幫所有者設定整體環境,可以改這裡。不過,沒事還是不要隨便改這個檔案,這個檔案設定的有其他重要變數,也會引用其他檔案,例如,/etc/profile.d/*.sh、/etc/local.conf等等。

~/.bash_profile(login shell 才會讀)

bash 在讀完整體環境設定的 /etc/profile 並藉此呼叫其他配置檔案後,接下來則是會讀取使用者的個人配置檔案。在login shell 的 bash 環境中,所讀取的個人偏好配置檔案其實主要有三個,依順序分別為:
1.~/.bash_profile
2.~/.bash_login
3.~/.profile
其實 bash 的 login shell 設定只會讀取上面三個檔案的其中一個,而讀取的順序則是依照上面的順序。
最後,看看這個 login shell 的讀取流程:這裡寫圖片描述

實線的方向是主執行緒流程,虛線的方向則是被呼叫的配置檔案。

討論 source 與 ~/.bashrc

  • source:讀取環境配置檔案的指令
    由於 /etc/profile 與 ~/.bash_profile 都是在取得 login shell 的時候才會讀取的配置檔案,所以,如果將自己的偏好設定寫入上述檔案後,通常都是得登出在登入後,改設定才會生效。那麼,能不能直接讀取配置檔案而不登出登入呢?可以的,那就是利用 source 這個指令。
    利用 source 或小數的(.)都可以將配置檔案的內容讀進來目前的 shell 環境中。

~/.bashrc(non-login shell 會讀)

談完了 login shell 後,那麼 non-login shell 這種非登入情況取得 bash 操作介面的環境配置檔案又是什麼? 當你取得 non-login shell 時,該 bash 配置檔案僅會讀取 ~/.bash 而已。