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

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的提示符。
    解決方式,找一個其他的系統把這兩個文件拷貝回來即可。