分类:
2011-07-06 22:17:34
系统变量是一個有名称的物件,包含一個或多個程式要用的資訊。許多使用者(特別是 Linux 新手)覺得这有一些古怪而且難以管理。这想法有一些錯誤:使用者可以用系统变量輕鬆的改變一個或多個程式設定。
重要的範例
下面的表格顯示許多 Linux 使用的变量以及它們的用途。範例在表格後面展示。
变量 說明
PATH 这個变量包含用冒號分隔的目錄列表,讓系统尋找可執行檔。如果您輸入一個可執行檔 (例如 ls,rc-update 或 emerge)但是这個檔案不在列表中的 目錄,您的系统不會執行它(除非您輸入完整的路徑,如 /bin/ls)。
ROOTPATH 这個变量和 PATH 有相同功能,但是这裡面包含的目錄是根使用者數入指令時 才會尋找。
LDPATH 这個变量包含以冒號分隔的目錄列表,讓動態連結檔在裡面搜尋函式庫。
MANPATH 这個变量包含以冒號分隔的目錄列表,讓 man 指令搜尋手冊頁。
INFODIR 这個变量包含以冒號分隔的目錄列表,讓 info 搜尋資訊頁。
PAGER 这個变量包含顯示檔案內容的程式路徑(例如 less 或 more)。
EDITOR 这個变量包含編輯的程式路徑(例如 nano 或 vi)。
KDEDIRS 这個变量包含以冒號分隔的目錄列表,設定 KDE 的主要路徑。
CLASSPATH 这個变量包含以冒號分隔的目錄列表,設定 Java 程式的路徑。
CONFIG_PROTECT 这個变量包含以空白分隔的目錄列表,这些目錄在 Portage 更新時需要被保護。
CONFIG_PROTECT_MASK 这個变量包含以空白分隔的目錄列表,这些目錄更新 Portage 時不要被保護。
底下是所有的变量的設定範例:
原始碼一覽表 1: Example definitions
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"
CLASSPATH="/opt/blackdown-jre-1.4.1/lib/rt.jar:."
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
5.b. 定义全域变量
/etc/env.d 目錄
為了要集中管理这些变量的設定,Gentoo 使用 /etc/env.d 目錄。在目錄中您會發現許多檔案,例如 00basic,05gcc 等。这裡面包含檔案名称中所提到的程式需要用的变量。
例如,當您安裝 gcc 後,ebulid 會建立一個叫做 05gcc 的檔案,包含下面的变量設定:
原始碼一覽表 2: /etc/env.d/05gcc
PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info"
CC="gcc"
CXX="g++"
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
其他的 Linux 套件會告訴您在 /etc/profile 或其他地方新增这些变量。 Gentoo 則讓您很容易(對 Portage 也是)去管理这些变量而不用注意其他設定系统变量的檔案。
舉例來說,當 gcc 更新了之後,/etc/env.d/05gcc 也會同時被更新而使用者不必做任何事。
这不僅對 Portage 有好處,對使用者也是。您或許偶爾會被要求設定一些系统变量。拿 http_proxy 做例子。您不用弄亂 /etc/profile,只要建立一個檔案( /etc/env.d/99local )然後在裡面輸入設定:
原始碼一覽表 3: /etc/env.d/99local
http_proxy="proxy.server.com:8080"
藉著將您自己的变量設定放到这個檔案中,您可以很快找到哪些变量是您自己設定的。
env-update 指令稿
在 /etc/env.d 中的數個檔案同時定义了 PATH 变量。这並沒有錯:當您執行 env-update,他會把數個設定同時加到系统設定中,因此讓軟體套件(或使用者)加入他們自己的設定而不會干擾已經存在的設定。
env-update 指令稿將會以 /etc/env.d 中的檔案名称以字母順序依序加入系统設定中。这就是為什么这裡面的許多檔案以數字開頭。
原始碼一覽表 4: env-update 的新增順序
00basic 99kde-env 99local
+-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"
當您執行 env-update,他會建立所有的系统变量然後寫入 /etc/profile.env 中(这檔案被 /etc/profile 使用)。他也會從 LDPATH 讀取資訊然後建立 /etc/ld.so.conf,之後,他會執行 ldconfig 重新建立動態連結使用的 /etc/ld.so.cache 檔案。
如果您希望 env-update 在您執行它後立刻作用,執行下面的指令來更新。自行安裝 Gentoo 的使用者可能會記得安裝過程中執行過:
原始碼一覽表 5: 更新环境变量
# env-update && source /etc/profile
5.c. 定义局部变量
使用者自行設定
您或許不想要定义全域变量。例如您可能要加入 /home/my_user/bin 到 PATH 变量中,但是您不想要其他使用者在他們的 PATH 也有这個設定。如果您想要定义區域变量,您可以加到 ~/.bashrc 或 ~/.bash_profile:
原始碼一覽表 6: 在 ~/.bashrc 中額外增加局部 PATH 設定
PATH="${PATH}:/home/my_user/bin"
當您重新登入後,您的 PATH 变量就會更新了。
有期限的設定
有的時候需要更嚴格的定义。例如您可能需要從您剛剛建立的暫時目錄執行程式,但您不想輸入完整的路徑或是編輯 ~/.bashrc 只為了在这一小段時間使用。
在这種情況下,您只要使用 export 指令設定 PATH 变量。只要您不登出, PATH 將會使用目前暫時的設定。
原始碼一覽表 7: 設定有期限的变量
# export PATH="${PATH}:/home/my_user/tmp/usr/bin"