[ << ] [ < ] [ 手册主页 ] [ > ] [ >> ]
6.a. 环境变量?
它们是什么?
一个环境变量是一个包含了被一个或多个程序所用的信息的对象。很多用户(特别是Linux的新手)发现这些变量有些奇怪或者不好管理。而事实上这是错误的:通过使用环境变量,用户可以很容易的给一个或多个程序修改一处配置。
重要的例子
下表列出了一些Linux系统使用的环境变量以及他们的用处。在表后举例给出了这些变量的值。
| 变量 | 描述 |
| PATH | 这个变量包含了一系列由冒号隔开的文件夹,你的系统将会在这些文件夹中寻找可执行文件。如果你输入一个可执行程序的名字(如ls、rc-update或者emerge)而并不在这一系列文件夹中,你的系统将不会执行它(除非你输入命令的全路径,如/bin/ls)。 |
| ROOTPATH | 这个变量同PATH功能相同,但是这个只列出超级用户输入命令时所查看的文件夹。 |
| LDPATH | 这个变量包含了一系列冒号隔开的文件夹,动态链接程序将在这些文件夹里搜索库文件。 |
| MANPATH | 这个变量包含了一系列冒号隔开的文件夹,命令man将在这些文件夹里搜索手册页面(man)。 |
| INFODIR | 这个变量包含了一系列冒号隔开的文件夹,命令info将在这些文件夹里搜索帮助页面(info)。 |
| PAGER | 这个变量包含了用作列出文件内容的程序的路径(如less或者more)。 |
| EDITOR | 这个变量包含了用作编辑文件内容的程序的路径(如nano或者vi)。 |
| KDEDIRS | 这个变量包含了一系列冒号隔开的包含KDE相关资料的文件夹。 |
| CLASSPATH | 这个变量包含了一系列冒号隔开的包含Java class的文件夹。 |
| 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"
|
6.b. 全局定义变量
文件夹/etc/env.d
Gentoo提供了文件夹/etc/env.d来集中这些变量的定义。在这个文件夹里,你将找到许多文件,如00basic、05gcc等等,这些包含了文件名中提到的程序需要的变量。
比如,当你安装gcc时,一个叫做05gcc的文件将会由Ebuild创建,文件里包含了下面变量的定义:
代码 2: /etc/conf.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/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里文件的字母顺序来附加变量的值。这也就是为什么/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
|
6.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"
|
[ << ] [ < ] [ 手册主页 ] [ > ] [ >> ]