一、系統(tǒng)環(huán)境變量配置文件
Linux系統(tǒng)環(huán)境變量配置文件分為兩種:系統(tǒng)級文件和用戶級文件拔恰。
1抑片、系統(tǒng)級文件:
/etc/profile:在登錄時仇味,操作系統(tǒng)定制用戶環(huán)境時使用的第一個文件照宝,此文件為系統(tǒng)的每個用戶設(shè)置環(huán)境信息蛇受,當(dāng)用戶第一次登錄時,該文件被執(zhí)行厕鹃。并從/etc/profile.d目錄的配置文件中搜集shell的設(shè)置兢仰,這個文件一般就是調(diào)用/etc/bash.bashrc文件。
/etc/bash.bashrc:系統(tǒng)級的bashrc文件熊响,為每一個運(yùn)行bash shell的用戶執(zhí)行此文件,當(dāng)bash shell被打開時诗赌,該文件被讀取汗茄。(其中ubuntu和debian有/etc/bash.bashrc文件但是沒有/etc/bashrc, 其他的系統(tǒng)基本都是只有/etc/bashrc沒有/etc/bash.bashrc)
/etc/environment: 在登錄時操作系統(tǒng)使用的第二個文件,系統(tǒng)在讀取你自己的profile前,設(shè)置環(huán)境文件的環(huán)境變量铭若。
2洪碳、用戶級文件:
~/.profile: 在登錄時用到的第三個文件,每個用戶都可使用該文件輸入專用于自己使用的shell信息,當(dāng)用戶登錄時,該文件僅僅執(zhí)行一次叼屠!默認(rèn)情況下瞳腌,他設(shè)置一些環(huán)境變量,執(zhí)行用戶的.bashrc文件镜雨。
~/.bashrc:該文件用來給bash初始化比如bash的設(shè)置, bash的代碼補(bǔ)全, bash的別名等等嫂侍。當(dāng)?shù)卿洉r以及每次打開新的shell時,該文件被讀取。
~/.bash_logout:當(dāng)每次退出系統(tǒng)(退出bash shell)時荚坞,執(zhí)行該文件挑宠。
~/.pam_environment:用戶級的環(huán)境變量設(shè)置文件。
另外, 在用戶目錄下可能會存在 ~/.bash_profile, ~/.bash_login這樣的文件, 但如果有這些文件bash就不會去載入 ~/.profile 了, 所以如果存在的話需要刪除 這些文件并把內(nèi)容合并進(jìn) ~/.profile 和 /.bashrc才行颓影。(其中優(yōu)先級:/.bash_profile, ~/.bash_login各淀, ~/.profile)
二、shell的分類
系統(tǒng)的shell有很多種, 比如bash, sh, zsh之類的, 如果要查看某一個用戶使用的是什么 shell 可以通過 finger [USERNAME] 命令來查看诡挂。
1碎浇、login shell 和 no-login shell
“l(fā)ogin shell” 代表用戶登入, 比如使用"su -"命令, 或者用ssh連接到某一個服務(wù)器上, 都會使用該用戶默認(rèn)shell啟動 login shell 模式临谱。
該模式下的 shell 會去自動執(zhí)行
/etc/profile
~/.profile
但不會執(zhí)行任何的bashrc文件, 所以一般再在/etc/profile 或者 ~/.profile里我們會手動去
source bashrc 文件。
而 no-login shell 的情況是我們在終端下直接輸入 bash 或者 bash -c “CMD” 來啟動的 shell.
該模式下是不會自動去運(yùn)行任何的profile文件奴璃。
2悉默、interactive shell 和 non-interactive shell
interactive shell 是交互式shell, 顧名思義就是用來和用戶交互的, 提供了命令提示符可以輸入命令。
該模式下會存在一個叫 PS1 的環(huán)境變量, 如果還不是login shell的則會source /etc/bash.bashrc和
~/.bashrc文件溺健。
non-interactive shell 則一般是通過 bash -c “CMD” 來執(zhí)行的bash麦牺。
三、執(zhí)行分類
代表在文件內(nèi)部source, 換行的 => 代表自身執(zhí)行結(jié)束以后再source, 同一行表示先source再執(zhí)行自身
1鞭缭、在可能存在的模式組合中 RC 文件的執(zhí)行
SSH login, sudo su - [USER] 或者 mac下開啟終端剖膳、ssh登入和su - 是典型的interactive login shell, 所以會有 PS1 變量, 并且會執(zhí)行
/etc/profile
=> /etc/bash.bashrc
~/.profile
=> ~/.bashrc => /etc/bash.bashrc
2、在命令提示符狀態(tài)下輸入bash或者ubuntu默認(rèn)設(shè)置下打開終端
這樣開啟的是 interactive no-login shell, 所以會有 PS1 變量, 只會執(zhí)行
/etc/bash.bashrc
~/.bashrc => /etc/bash.bashrc
3岭辣、特殊情況
3.1
通過 bash -c “CMD” 或者 bash BASHFILE 命令執(zhí)行的 shell這些命令什么都不會執(zhí)行, 也就是設(shè)置PS1變量, 不執(zhí)行任何RC文件吱晒。
3.2
通過 “ssh server CMD” 執(zhí)行的命令或通過程序執(zhí)行遠(yuǎn)程的命令這是最特殊的一種模式, 理論上應(yīng)該既是非交互也是非登入的, 但是實際上他不會設(shè)置 PS1, 但是還會執(zhí)行:
ssh server "CMD"
/etc/bash.bashrc => /etc/profile
~/.bashrc => | /etc/bash.bashrc => /etc/profile
| ~/.profile
因此對于剛登錄系統(tǒng)時執(zhí)行文件的順序為:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc-> /etc/bash.bashrc -> ~/.bash_logout(退出shell時)
四、設(shè)置環(huán)境變量的方法
0沦童、查看當(dāng)前環(huán)境變量
echo $PATH
1仑濒、登出后失效
export PATH=PATH:/xxx/xxx/bin
2、修改~/.bashrc 或 ~/.profile (~/.bath_profile) 偷遗、或系統(tǒng)級別的/etc/profile墩瞳,在其中添加:
export PATH=/xxx/xxx/bin:$PATH
source .bashrc #source命令通常用于重新執(zhí)行剛修改的初始化文件,使之立即生效氏豌,而不必注銷并重新登錄