『忘了再學』Shell基礎 — 22、主要的環境變數配置檔案說明

繁華似錦Fighting發表於2022-05-30

1、source命令

通過source命令可以直接環境變數配置檔案。

命令格式如下:

[root@localhost ~]# source 配置檔案
或用.
[root@localhost ~]# . 配置檔案

提示:

配置完成的環境變數配置檔案,是需要使用者退出並重新登陸才能生效,並不一定需要重啟。

那如果重新登陸覺得很不方便,可以使用source命令和.命令重新載入該配置檔案,使其直接生效。

2、Linux系統中環境變數配置檔案

(1)登入時生效的環境變數配置檔案

在Linux系統登入時,主要生效的環境變數配置檔案有以下五個:

  • /etc/profile
  • /etc/profile.d/*.sh
  • ~/.bash_profile
  • ~/.bashrc
  • /etc/bashrc

一類是放在/etc/目錄下的環境變數配置檔案,一類是放在家目錄中的環境變數配置檔案。

區別在於放在/etc/目錄下的環境變數配置檔案中的配置內容是對所有使用者生效的,

而放在家目錄中的環境變數配置檔案中的配置內容只對當前使用者生效。

(2)/etc/profile環境變數配置檔案

在使用者登入過程先呼叫/etc/profile檔案

在這個環境變數配置檔案中會定義一些預設環境變數:

  • USER變數:根據登入的使用者,給這個變數賦值(就是讓USER變數的值是當前使用者)。
  • LOGNAME變數:根據USER變數的值,給這個變數賦值。
  • MAIL變數:根據登入的使用者,定義使用者的郵箱為/var/spool/mail/使用者名稱
  • PATH變數:根據登入使用者的UID是否為0,判斷PATH變數是否包含/sbin/usr/sbin/usr/local/sbin這三個系統命令目錄。
    這裡需要注意的是,我們登陸時候看到的PATH環境變數的內容,可能不是上邊三個目錄,是因為後邊載入的環境變數配置檔案對PATH環境變數重新賦值了,就覆蓋了。
  • HOSTNAME變數:填加主機名,給這個變數賦值。
  • HISTSIZE變數:定義歷史命令的儲存條數。
  • umask:定義umask預設許可權。注意/etc/profile檔案中的umask許可權是在“有使用者登入過程(也就是輸入了使用者名稱和密碼)”時才會生效。

(3)/etc/profile.d/*.sh環境變數配置檔案

/etc/profile檔案呼叫/etc/profile.d/*.sh檔案。

也就是/etc/profile檔案會呼叫/etc/profile.d/目錄下所有以.sh結尾的檔案。這裡最常用的就是lang.sh檔案,而這個檔案又會呼叫/etc/sysconfig/i18n檔案。(/etc/sysconfig/i18n檔案就是我們前面講過的預設語系配置檔案)

/etc/profile檔案中通過一個for迴圈呼叫的/etc/profile.d/*.sh檔案,如下:

image

(4)~/.bash_profile環境變數配置檔案

/etc/profile檔案呼叫~/.bash_profile檔案(家目錄中)。
~/.bash_profile檔案就沒有那麼複雜了,這個檔案主要實現了兩個功能:

  • 呼叫~/.bashrc檔案(如果有則呼叫)。
  • 在PATH變數後面疊加了:$HOME/bin這個目錄。
    也就是說,如果我們在自己的家目錄中建立bin目錄,然後把自己的指令碼放入~/bin目錄,就可以直接執行指令碼,而不用通過目錄執行了。

(5)~/.bashrc環境變數配置檔案

~/.bash_profile檔案呼叫~/.bashrc檔案。

~/.bashrc檔案中主要實現了:

  • 定義預設別名,把自己定義的別名也放入這個檔案。
  • 呼叫/etc/bashrc檔案。

提示:定義別名的時候,定義在/etc/profile~/.bash_profile~/.bashrc/etc/bashrc這個四個配置檔案中的哪個檔案中都可以,因為他們是一條線,順序載入的,只要別名的值沒有被覆蓋。

(6)/etc/bashrc環境變數配置檔案

~/.bashrc檔案呼叫了/etc/bashrc檔案。

/etc/bashrc檔案中主要定義了以下內容:

  • PS1變數:也就是使用者的提示符,如果我們想要永久修改提示符,就要在這個檔案中修改。
  • umask:定義umask預設許可權。
    這個檔案中定義的umask是針對“沒有登入過程(也就是不需要輸入使用者名稱和密碼時,比如從一個終端切換到另一個終端,或進入子Shell)"時生效的(非登陸情況下)。
    如果是“有使用者登入過程”,則是/etc/profile檔案中的umask生效。
  • PATH變數:會給PATH變數追加值,這些值是在“沒有登入過程”時才生效的(非登陸情況下)。
  • /etc/profile.d/*.sh檔案,這是在“沒有使用者登入過程”時才呼叫(非登陸情況下)。
    在“有使用者登入過程”時,/etc/profile.d/*.sh檔案已經被/etc/profile檔案呼叫過了。

3、環境變數配置檔案呼叫過程

image

環境變數配置檔案呼叫過程有兩個方向:

1)使用者正常登陸Linux系統時的環境變數配置檔案載入方向。

也就是登陸Linux系統的時候,輸入賬戶密碼,正常進行登陸。

/etc/profile檔案呼叫/etc/profile.d/*.sh檔案和~/.bash_profile檔案。

image

最終載入/etc/sysc onfig/i18n檔案和看到命令提示符。

2)非登陸情況下的環境變數配置檔案載入方向。

什麼是非登陸狀態,比如說我是root使用者,通過su命令切換成user1使用者。

這個時候是不需要輸入使用者密碼的,直接就可以切換進去。

還有是在父Shell中開啟一個子Shell,這種情況下,也不需要輸入使用者名稱密碼,就可以直接進入子Shell中。

上面這兩種情況都屬於非登陸情況,user1使用者和子Shell中的環境變數配置檔案都是這種載入方向。

非登陸情況下環境變數配置檔案載入方向是在/etc/bashrc檔案開始載入,

載入/etc/profile.d/*.sh檔案,之後載入/etc/profile.d/lang.sh,然後載入/etc/sysconfig/i18n檔案,最終顯示命令提示符。

image

4、總結

  • 這樣這五個環境變數配置檔案會被依次呼叫,那麼如果是我們自己定義的環境變數應該放入哪個檔案呢?
    如果你的修改是打算對所有使用者生效的,那麼可以放入/etc/profile環境變數配置檔案中;
    如果你的修改只是給自己使用的,那麼可以放入~/.bash_profile~/.bashrc這兩個配置檔案中的任一個。
  • 可是如果我們誤刪除了這些環境變數,比如刪除了/etc/bashrc檔案,或刪除了~/.bashrc檔案,那麼這些檔案中配置就會失效。
    根據上邊的環境變數配置檔案載入流程,如果誤刪除了/etc/bashrc檔案,那麼命令提示符就無法正常定義和顯示了,命令提示符就會顯示成簡單的bash版本的提示符了-bash-4.1#
  • /etc/目錄下的環境變數配置檔案,我們一般很少動,但是家目錄中的兩個配置檔案,我們會有很大的機率誤刪除。
    根據環境變數配置檔案載入的順序,最終都會導致/etc/bashrc檔案無法正常載入。
    出現這種現象最直觀的現象就是,你看到的命令提示符,變成了一個簡易bash的提示符。
    解決方式,找一個其他的系統把這兩個檔案拷貝回來即可。

相關文章