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