bash shell 下的環境變量

linux是一個多用戶的操作系統。每個用戶登錄系統後,都會有一個專用的運行環境。通常每個用戶默認的環境都是相同的,這個默認環境實際上就是一組環境變量的定義。用戶可以對自己的運行環境進行定製,其方法就是修改相應的系統環境變量。
什麼是環境變量
環境變量是一個具有特定名字的對象,它包含了一個或者多個應用程序所將使用到的信息。許多用戶(特別是那些剛接觸Linux的新手)發現這些變量有些怪異或者難以控制。其實,這是個誤會:通過使用環境變量,你可以很容易的修改一個牽涉到一個或多個應用程序的配置信息。
定製環境變量
環境變量是和 Shell 緊密相關的,用戶登錄系統後就啓動了一個 Shell 。對於 Linux 來說一般是 bash ,但也可以重新設定或切換到其它 的 Shell (使用 chsh 命令)。
根據發行版本的情況, bash 有兩個基本的系統級配置文件: /etc/bashrc 和 /etc/profile 。這些配置文件包含兩組不同的變量: shell 變量和環境變量。前者只是在特定的 shell 中固定(如 bash ),後者在不同 shell 中固定。很明顯, shell 變量是局部的,而環境變量是全局的。環境變量是通過 Shell 命令來設置的,設置好的環境變量又可以被所有當前用戶所運行的程序所使用。對於 bash 這個 Shell 程序來說,可以通過變量名來訪問相應的環境變量,通過 export 來設置環境變量。
重要的例子
環境變量設置實例
1.使用命令 echo 顯示環境變量
本例使用 echo 顯示常見的變量 HOME
$ echo $HOME  
/home/kevin
2.設置一個新的環境變量
$ export MYNAME=”my name is kevin”
$ echo $ MYNAME
my name is Kevin
3.修改已存在的環境變量
接上個示例
$ MYNAME=”change name to jack”
$ echo $MYNAME
change name to jack
4.使用 env 命令顯示所有的環境變量
$ env
HOSTNAME=localhost.localdomain
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
SSH_CLIENT=192.168.136.151 1740 22
QTDIR=/usr/lib/qt-3.1
SSH_TTY=/dev/pts/0
……
5.使用 set 命令顯示所有本地定義的 Shell 變量
$ set
BASH=/bin/bash
BASH_ENV=/root/.bashrc
……
6.使用 unset 命令來清除環境變量
$ export TEMP_KEVIN=”kevin”     # 增加一個環境變量 TEMP_KEVIN
$ env | grep TEMP_KEVIN          # 查看環境變量 TEMP_KEVIN 是否生效(存在即生效)
TEMP_KEVIN=kevin   # 證明環境變量 TEMP_KEVIN 已經存在
$ unset TEMP_KEVIN            # 刪除環境變量 TEMP_KEVIN
$ env | grep TEMP_KEVIN       # 查看環境變量 TEMP_KEVIN 是否被刪除,沒有輸出顯示,證明TEMP_KEVIN 被清除了。
7.使用 readonly 命令設置只讀變量
注:如果使用了 readonly命令的話,變量就不可以被修改或清除了。
$ export TEMP_KEVIN ="kevin"      # 增加一個環境變量 TEMP_KEVIN
$ readonly TEMP_KEVIN                  # 將環境變量 TEMP_KEVIN設爲只讀
$ env | grep TEMP_KEVIN          # 查看環境變量 TEMP_KEVIN 是否生效
TEMP_KEVIN=kevin           # 證明環境變量 TEMP_KEVIN 已經存在
$ unset TEMP_KEVIN           # 會提示此變量只讀不能被刪除
-bash: unset: TEMP_KEVIN: cannot unset: readonly variable
$ TEMP_KEVIN ="tom"          # 修改變量值爲 tom 會提示此變量只讀不能被修改
-bash: TEMP_KEVIN: readonly variable
8.通過修改環境變量定義文件來修改環境變量。
需要注意的是,一般情況下,僅修改普通用戶環境變量配置文件,避免修改根用戶的環境定義文件,因爲那樣可能會造成潛在的危險。
$ cd ~                                  # 到用戶根目錄下
$ ls -a                                 # 查看所有文件,包含隱藏的文件
$ vi .bash_profile                # 修改用戶環境變量文件
例如:
編輯你的 PATH 聲明,其格式爲:
PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>
你可以自己加上指定的路徑,中間用冒號隔開。
環境變量更改後,在用戶下次登陸時生效。
如果想立刻生效,則可執行下面的語句: $source .bash_profile
需要注意的是,最好不要把當前路徑 ”./” 放到 PATH 裏,這樣可能會受到意想不到的攻擊。
完成後,可以通過 $ echo $PATH查看當前的搜索路徑。這樣定製後,就可以避免頻繁的啓動位於 shell 搜索的路徑之外的程序了。
特殊字符介紹。
  
9.特殊字符

如在profile中有如下內容,通過以下內容說明特殊符號的用法。
  export A=/q/jing:aaa/cc/ld
  export B=.:/liheng/wang export A=/cd/cdr:$A
  : 表示並列含義,例如A變量值有多個,用:符號進行分離。
  . 表示你操作的當前目錄。例如pap命令會查找B環境變量。
  在/home鍵入B命令,系統首先在/home目錄下(即當前路徑)查找關於 B 的內容,如果沒有在/liheng/wang目錄下查找關於B的內容。 $ 表示該變量本次定義之前的值,例如$A代表/q/jing:aaa/cc/ld。也就是說 A=/cd/cdr:/q/jing:aaa/cc/ld

變量說明
PATH這個變量包含了一系列由冒號分隔開的目錄,系統就從這些目錄裏尋找可執行文件。如果你輸入的可執行文件(例如ls、rc-update或者emerge)不在這些目錄中,系統就無法執行它(除非你輸入這個命令的完整路徑,如/bin/ls)。
ROOTPATH這個變量的功能和PATH相同,但它只羅列出超級用戶(root)鍵入命令時所需檢查的目錄。
LDPATH這個變量包含了一系列用冒號隔開的目錄,動態鏈接器將在這些目錄裏查找庫文件。
MANPATH這個變量包含了一系列用冒號隔開的目錄,命令man會在這些目錄裏搜索man頁面。
INFODIR這個變量包含了一系列用冒號隔開的目錄,命令info將在這些目錄裏搜索info頁面。
PAGER這個變量包含了瀏覽文件內容的程序的路徑(例如less或者more)。
EDITOR這個變量包含了修改文件內容的程序(文件編輯器)的路徑(比如nano或者vi)。
KDEDIRS這個變量包含了一系列用冒號隔開的目錄,裏面放的是KDE相關的資料。
CONFIG_PROTECT這個變量包含了一系列用空格隔開的目錄,它們在更新的時候會被Portage保護起來。
CONFIG_PROTECT_MASK這個變量包含了一系列用空格隔開的目錄,它們在更新的時候不會被Portage保護起來。
下面你可以找到所有這些變量定義的範例:
代碼1:定義範例
PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin" 
 
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" 
 
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3" 
 
MANPATH="/usr/share/man:/usr/local/share/man" 
 
INFODIR="/usr/share/info:/usr/local/share/info" 
 
PAGER="/usr/bin/less" 
 
EDITOR="/usr/bin/vim" 
 
KDEDIRS="/usr" 
 
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb/opt/tomcat/conf" 
 
/usr/kde/3.1/share/config/usr/share/texmf/tex/generic/config/"  
 
/usr/share/texmf/tex/platex/config//usr/share/config"  
 
CONFIG_PROTECT_MASK="/etc/gconf" 
 
對於bashshell關於環境變量命令介紹:
1.echo顯示某個環境變量值echo$PATH
2.export設置一個新的環境變量exportHELLO="hello"(可以無引號)
3.env顯示所有環境變量
4.set顯示本地定義的shell變量
5.unset清除環境變量unsetHELLO
6.readonly設置只讀環境變量readonlyHELLO
常見的環境變量
PATH:決定了shell將到哪些目錄中尋找命令或程序
HOME:當前用戶主目錄
MAIL:是指當前用戶的郵件存放目錄。
SHELL:是指當前用戶用的是哪種Shell。
HISTSIZE:是指保存歷史命令記錄的條數
LOGNAME:是指當前用戶的登錄名。
HOSTNAME:是指主機的名稱,許多應用程序如果要用到主機名的話,通常是從這個環境變量中來取得的。
LANG/LANGUGE:是和語言相關的環境變量,使用多種語言的用戶可以修改此環境變量。
PS1:是基本提示符,對於root用戶是#,對於普通用戶是$。
PS2:是附屬提示符,默認是“>”。可以通過修改此環境變量來修改當前的命令符,比如下列命令會將提示符修改成字符串“Hello,MyNewPrompt:)”。
#PS1="Hello,MyNewPrompt:)"
使用修改.bashrc文件進行環境變量的編輯,只對當前用戶有用。
使用修改/etc/profile文件進行環境變量的編輯,是對所有用戶有用。大家一定要注意區別。


發佈了20 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章