Chinaunix首页 | 论坛 | 博客
  • 博客访问: 173232
  • 博文数量: 101
  • 博客积分: 509
  • 博客等级: 下士
  • 技术积分: 680
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-08 21:55
文章分类

全部博文(101)

文章存档

2013年(6)

2012年(79)

2011年(16)

分类:

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"

阅读(714) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~