Linux是一個多用戶的操作系統,每個用戶登錄系統,都會有一個專用的運行環境。通常每個用戶默認的環境都是相同的,默認環境實際上是一組環境變量的定義。通過相應的系統環境變量,用戶可以對自己的運行環境進行個性化設置。
一、Shell變量
Shell 變量名可以由下划線、字母、數字組成,單變量不能以數字開頭,並注意區分大小寫。在 Shell 中,要對Shell 的變量繼續操作,通常使用以下幾個命令。
# 設置變量: 變量名=變量值
[hk@localhost ~]$ MYPATH=/home/hk/c/
# 使用變量: $變量名
[hk@localhost ~]$ echo $MYPATH
/home/hk/c/
# 查看變量可以使用 set 命令,並可以利用管道查找需要的環境變量
[hk@localhost ~]$ set|grep MYPATH
MYPATH=/home/hk/c/
# 清除變量使用 unset 命令
[hk@localhost ~]$ unset MYPATH
# 因為變量已被清除,打印一行空行
[hk@localhost ~]$ echo $MYPATH
[hk@localhost ~]$
Shell 中的變量類型有很多種,這里主要介紹兩種,
-
本地變量:
本地變量只存在於當前Shell,使用 set 命令將顯示所有變量的列表、環境變量和函數。由於本地變量只存在於當前Shell,重新登錄或重啟會使設置的變量的失效,並且已經登錄的多個Shell之間的自定義環境變量時互不可見的。
-
環境變量:
環境變量一般是Shell保留的一些變量,這些變量決定了用戶與系統交互的一些特性。幾個常用的環境變量說明如下所示。
參數 說明
HOME 當前用戶的主目錄,同符號"~"
PATH 一個用冒號分隔的目錄列表,Shell執行命令時首先從這些目錄里查找相關命令
PS1 主要提示符
PS2 次要提示符
HISTSIZE 在歷史列表中記錄的最大命令數
LANG 語言環境變量設置
PPID 當前Shell父進程的進程ID
RANDOM 一個 0 到 32767 之間的隨機整數
TERM 終端的類型
UID 當前用戶的識別字,取值由數位構成的字串
二、Shell環境變量的配置文件
當登錄到 Linux 系統后,需要給當前用戶設置一些默認的環境變量,例如主機名HOSTNAME,命令搜索路徑 PATH 或終端類型 TERM 等。這些變量在用戶登錄時通過用戶的環境變量配置文件來設置。在用戶主目錄下有一下變量相關的文件,如下所示:
[hk@localhost ~]$ ls -a .bash*
.bash_history .bash_logout .bash_profile .bashrc
# .bash_history 記錄了當前用戶執行過的歷史命令
# .bash_logout 表示退出當前Shell時需要執行的命令
# .bash_profile 表示登錄當前Shell時需要執行的命令
# .bashrc 表示每次打開新的Shell時需要執行的命令
.bash_profile 只在會話開始時被載入,而 .bashrc 在每次打開新的終端時都要被讀取。一般為了統一設置,可以把所有設置都放進 .bashrc 。
以上這些文件是每一位用戶的設置。系統級的設置存儲在 /etc/profile、/etc/bashrc 及目錄 /etc/profile.d 下的文件中,這些文件的編輯需要具備 root 權限,所以一般通過用戶自己的環境變量定義文件設置屬於該用戶的環境變量。當系統與用戶級的設置發生沖突時,將優先采用用戶的設置。
三、Shell使用中的常見問題
1. 顯示所有環境變量
在 Linux 系統中顯示所有環境變量可以使用 export、env、 set 等命令,可以和管道結合使用來模糊查找某些環境變量。
# 先使用 set 命令來顯示所有環境變量,然后利用管道將輸出傳給 grep 命令查找匹配的環境變量
[hk@localhost ~]$ set | grep PATH
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hk/.local/bin:/home/hk/bin
[hk@localhost ~]$ set | grep HIS
HISTCONTROL=ignoredups
HISTFILE=/home/hk/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
[hk@localhost ~]$
2. 清除環境變量
要清除環境變量,可以使用 unset 或 使用 export 將某個變量設置為空,如下所示:
# 使用export 命令設置 MYPATH 環境變量
[root@localhost hk]# export MYPATH=/home/hk/c/
# 使用 echo 顯示MYPATH
[root@localhost hk]# echo $MYPATH
/home/hk/c/
# 使用 unset 清除 MYPATH
[root@localhost hk]# unset MYPATH
[root@localhost hk]# echo $MYPATH
[root@localhost hk]# export MYPATH=/home/hk/c/
[root@localhost hk]# echo $MYPATH
/home/hk/c/
# 使用 export 清除 MYPATH
[root@localhost hk]# export MYPATH=
[root@localhost hk]# echo $MYPATH
# 因為 MYPATH 已被清空,所以顯示空行
[root@localhost hk]#
