點選上方[全棧開發者社群]→右上角[...]→[設為星标⭐]

Linux環境變量配置
在自定義安裝軟體的時候,經常需要配置環境變量,下面列舉出各種對環境變量的配置方法。
下面所有例子的環境說明如下:
- 系統:Ubuntu 14.0
- 使用者名:uusama
- 需要配置MySQL環境變量路徑:/home/uusama/mysql/bin
Linux讀取環境變量
讀取環境變量的方法:
-
指令顯示目前系統定義的所有環境變量export
-
指令輸出目前的echo $PATH
環境變量的值PATH
這兩個指令執行的效果如下:
[email protected]:~$ export
declare -x HOME="/home/uusama"
declare -x
declare -x LANGUAGE="en_US:"
declare -x LESSCLOSE="/usr/bin/lesspipe %s %s"
declare -x LESSOPEN="| /usr/bin/lesspipe %s"
declare -x LOGNAME="uusama"
declare -x MAIL="/var/mail/uusama"
declare -x PATH="/home/uusama/bin:/home/uusama/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm"
declare -x USER="uusama"
[email protected]:~$ echo $PATH
/home/uusama/bin:/home/uusama/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
其中
PATH
變量定義了運作指令的查找路徑,以冒号
:
分割不同的路徑,使用
export
定義的時候可加雙引号也可不加。
Linux環境變量配置方法一: export PATH
使用
export
指令直接修改
PATH
的值,配置MySQL進入環境變量的方法:
export PATH=/home/uusama/mysql/bin:$PATH
# 或者把PATH放在前面
export PATH=$PATH:/home/uusama/mysql/bin
注意事項:
- 生效時間:立即生效
- 生效期限:目前終端有效,視窗關閉後無效
- 生效範圍:僅對目前使用者有效
- 配置的環境變量中不要忘了加上原來的配置,即
部分,避免覆寫原來配置$PATH
Linux環境變量配置方法二: vim ~/.bashrc
通過修改使用者目錄下的
~/.bashrc
檔案進行配置:
vim ~/.bashrc
# 在最後一行加上
export PATH=$PATH:/home/uusama/mysql/bin
注意事項:
- 生效時間:使用相同的使用者打開新的終端時生效,或者手動
生效source ~/.bashrc
- 生效期限:永久有效
- 生效範圍:僅對目前使用者有效
- 如果有後續的環境變量加載檔案覆寫了
定義,則可能不生效PATH
Linux環境變量配置方法三: vim ~/.bash_profile
和修改
~/.bashrc
檔案類似,也是要在檔案最後加上新的路徑即可:
vim ~/.bash_profile
# 在最後一行加上
export PATH=$PATH:/home/uusama/mysql/bin
注意事項:
- 生效時間:使用相同的使用者打開新的終端時生效,或者手動
生效source ~/.bash_profile
- 生效期限:永久有效
- 生效範圍:僅對目前使用者有效
- 如果沒有
檔案,則可以編輯~/.bash_profile
檔案或者建立一個~/.profile
Linux環境變量配置方法四:vim /etc/bashrc
該方法是修改系統配置,需要管理者權限(如root)或者對該檔案的寫入權限:
# 如果/etc/bashrc檔案不可編輯,需要修改為可編輯
chmod -v u+w /etc/bashrc
vim /etc/bashrc
# 在最後一行加上
export PATH=$PATH:/home/uusama/mysql/bin
注意事項:
- 生效時間:新開終端生效,或者手動
生效source /etc/bashrc
- 生效期限:永久有效
- 生效範圍:對所有使用者有效
Linux環境變量配置方法五: vim /etc/profile
該方法修改系統配置,需要管理者權限或者對該檔案的寫入權限,和
vim /etc/bashrc
類似:
# 如果/etc/profile檔案不可編輯,需要修改為可編輯
chmod -v u+w /etc/profile
vim /etc/profile
# 在最後一行加上
export PATH=$PATH:/home/uusama/mysql/bin
注意事項:
- 生效時間:新開終端生效,或者手動
生效source /etc/profile
- 生效期限:永久有效
- 生效範圍:對所有使用者有效
Linux環境變量配置方法六:vim /etc/environment
該方法是修改系統環境配置檔案,需要管理者權限或者對該檔案的寫入權限:
# 如果/etc/bashrc檔案不可編輯,需要修改為可編輯
chmod -v u+w /etc/environment
vim /etc/profile
# 在最後一行加上
export PATH=$PATH:/home/uusama/mysql/bin
注意事項:
- 生效時間:新開終端生效,或者手動
生效source /etc/environment
- 生效期限:永久有效
-
生效範圍:對所有使用者有效
Linux環境變量加載原了解析
上面列出了環境變量的各種配置方法,那麼Linux是如何加載這些配置的呢?是以什麼樣的順序加載的呢?
特定的加載順序會導緻相同名稱的環境變量定義被覆寫或者不生效。
環境變量的分類
環境變量可以簡單的分成使用者自定義的環境變量以及系統級别的環境變量。
- 使用者級别環境變量定義檔案:
、~/.bashrc
(部分系統為:~/.profile
)~/.bash_profile
- 系統級别環境變量定義檔案:
、/etc/bashrc
(部分系統為:/etc/profile
)、/etc/bash_profile
/etc/environment
另外在使用者環境變量中,系統會首先讀取
~/.bash_profile
(或者
~/.profile
)檔案,如果沒有該檔案則讀取
~/.bash_login
,根據這些檔案中内容再去讀取
~/.bashrc
。
測試Linux環境變量加載順序的方法
為了測試各個不同檔案的環境變量加載順序,我們在每個環境變量定義檔案中的第一行都定義相同的環境變量
UU_ORDER
,該變量的值為本身的值連接配接上目前檔案名稱。
需要修改的檔案如下:
- /etc/environment
- /etc/profile
- /etc/profile.d/test.sh,建立檔案,沒有檔案夾可略過
- /etc/bashrc,或者/etc/bash.bashrc
- ~/.bash_profile,或者~/.profile
- ~/.bashrc
在每個檔案中的第一行都加上下面這句代碼,并相應的把冒号後的内容修改為目前檔案的絕對檔案名。
export UU_ORDER="$UU_ORDER:~/.bash_profile"
修改完之後儲存,新開一個視窗,然後
echo $UU_ORDER
觀察變量的值:
[email protected]:~$ echo $UU_ORDER
$UU_ORDER:/etc/environment:/etc/profile:/etc/bash.bashrc:/etc/profile.d/test.sh:~/.profile:~/.bashrc
可以推測出Linux加載環境變量的順序如下:
- /etc/environment
- /etc/profile
- /etc/bash.bashrc
- /etc/profile.d/test.sh
- ~/.profile
- ~/.bashrc
Linux環境變量檔案加載詳解
由上面的測試可容易得出Linux加載環境變量的順序如下,:
系統環境變量 -> 使用者自定義環境變量
/etc/environment -> /etc/profile -> ~/.profile
打開
/etc/profile
檔案你會發現,該檔案的代碼中會加載
/etc/bash.bashrc
檔案,然後檢查
/etc/profile.d/
目錄下的
.sh
檔案并加載。
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
其次再打開
~/.profile
檔案,會發現該檔案中加載了
~/.bashrc
檔案。
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
從
~/.profile
檔案中代碼不難發現,
/.profile
檔案隻在使用者登入的時候讀取一次,而
/.bashrc
會在每次運作
Shell
腳本的時候讀取一次。
一些小技巧
可以自定義一個環境變量檔案,比如在某個項目下定義
uusama.profile
,在這個檔案中使用
export
定義一系列變量,然後在
~/.profile
檔案後面加上:
sourc uusama.profile
,這樣你每次登陸都可以在Shell腳本中使用自己定義的一系列變量。
也可以使用
alias
指令定義一些指令的别名,比如
alias rm="rm -i"
(雙引号必須),并把這個代碼加入到
~/.profile
中,這樣你每次使用
rm
指令的時候,都相當于使用
rm -i
指令,非常友善。
轉自:悠悠i
連結:www.cnblogs.com/youyoui/p/10680329.html
覺得本文對你有幫助?請分享給更多人
關注「全棧開發者社群」加星标,提升全棧技能
本公衆号會不定期給大家發福利,包括送書、學習資源等,敬請期待吧!
如果感覺推送内容不錯,不妨右下角點個在看轉發朋友圈或收藏,感謝支援。
好文章,留言、點贊、在看和分享一條龍吧❤️