环境变量是哪些?
环境变量是一个已命名的对象(namedobject),它包含了让一个或多个应用程序使用的一些信息.许多用户(尤其是Linux的新用户)会感觉这东西其实颇为怪异或无法飘忽(abitweirdorunmanageable).这觉得是不对的:使用环境变量,我们可以轻松地改变一个或多个应用程序的配置.
重要的事例
下表给出了Linux系统中所用的好些环境变量及其描述.其示例值在表后给出.
变量描述
PATH该变量包含了一个以逗号分隔的目录列表以让系统在这种目录里找寻可执行文件.倘若您输入了一个可执行文件的名子(如ls,rc-update或emerge),而该文件却不在这一列表中的任一目录里,则您的系统将不会执行它(除非您输入完整的路径,如/bin/ls)
ROOTPATH该变量共同与PATH同,不过它仅列举根用户(root-user)输入一个命令时应当寻觅的目录.
LDPATH该变量包含了一个以逗号分隔的目录列表以让动态链接器(dynamicallinker)在这种目录里找寻库文件(library).
MANPATH该变量包含了一个以逗号分隔的目录列表以让man命令在这种目录里找寻指南页
INFODIR该变量包含了一个以逗号分隔的目录列表以让info命令在这种目录里选择信息页
PAGER该变量包含了用以查看文件内容的程序(如less或more)所在的路径
EDITOR该变量包含了用以编辑文件内容的程序(如nano或vi)所在的路径
KDEDIRS该变量包含了一个以逗号分隔的目录列表,这种目录里包含了KDE专用的东西
CLASSPATH该变量包含了一个以逗号分隔的目录列表,这种目录里包含了ava类
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"
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
复制代码
定义全局变量
/etc/env.d目录
为了集中管理(centralize)这种变量的定义,Gentoo包含了一个/etc/env.d目录.该目录中您会看见数个文件,如00basic,05gcc等等.那些文件包含了其命名中所提及的应用程序所需的环境变量(whichcontainthevariablesneededbytheapplicationmentionedintheirname)(Cure:如05gcc里带的是gcc要用的环境变量,10mozilla带的是mozilla要用的环境变量,20java里是java要用的环境变量,依这种推).
比如,您安装完gcc以后,gcc的ebuild都会创建一个名为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"
复制代码
其他发行版会让您在/etc/profile或其他某个地方更改或添加这样那样的环境变量,而Gentoo为您(也为Portage)提供了一个很轻松的方法来维护和管理它们,同时无须关心这些都可以包含环境变量的众多文件.
比如,当gcc更新时,/etc/env.d/05gcc同时更新而无须用户操劳.
这除了让Portage获益,还包括您,作为一个用户.不时地,您会须要设定某个应用到系统范围的环境变量.我们以http_proxy变量为例.我们何必去/etc/profile里乱搞linux系统环境变量查看,仅需创建一个文件(/etc/env.d/99local)并把定义写上面就搞定:
代码清单3:/etc/env.d/99local
http_proxy=":8080"
复制代码
以同一个文件来放置您的所有变量,您就可以很容易地晓得自己都定义了什么变量.
env-update脚本
数个/etc/env.d中的文件里都定义了PATH变量,这没有问题的:当您运行env-update,它会在更新环境变量之前会先把这种定义添加到一起linux关机命令,籍此可以让软件包(或用户)很轻松地添加自己的环境变量而无须担忧干扰到原有的值.
env-update脚本会将/etc/env.d下的文件按字母次序挨个添加它们上面的值.这就是为何/etc/env.d下的许多文件都以数字开头.
代码清单4:env-update的更新次序
00basic99kde-env99local
+-------------+----------------+-------------+
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以重新创建为动态链接器(dynamicallinker)所用的/etc/ld.so.cache文件.
倘若您想在运行env-update然后马上听到疗效,请运行如下命令来更新您的环境.自己装过Gentoo的用户想必对安装手册中的这句并不陌生:
代码清单5:更新环境
#env-update&&source/etc/profile
复制代码
定义局部变量
用户特定
您并非总想全局性地定义某个变量.诸如,您似乎想让/home/my_user/bin成为PATH变量里的一部份linux系统环境变量查看,而同时又不没必要让系统中的其他用户的PATH里有这个路径.您要想局部地定义变量linux操作系统怎么样,请使用~/.bashrc或~/.bash_profile文件:
代码清单6:在~/.bashrc中扩充PATH变量以供局部(Cure:只对本用户有用)使用
PATH="${PATH}:/home/my_user/bin"
复制代码
您重新登陆后,PATH变量都会被更新.
会话特定
有时我们还须要定义范围更窄小(stricter)的变量.您似乎想使用自己临时创建目录中的一些(可执行的)二补码文件,而又不想总输入它们的完整路径,也不想就为了那么一小会儿的使用而去编辑~/.bashrc.
这些情况下,您可以用export命令在您当前的会话中定义PATH变量.只要您从未注销,则PATH变量会仍然使用该临时值.
代码清单7:定义会话特定(session-specific)的环境变量
#exportPATH="${PATH}:/home/my_user/tmp/usr/bin"
复制代码
文章评论