在Unix操作系统中可以在shell中通过set命令给环境变量赋值。但是如果采用这种方式对环境变量进行赋值的话,当重新启动操作系统或者重新启动这个会话的话,原先设置的环境变量就会丢失。也就是说,如果在shell会话中设置环境变量,这只对当前的会话有效。当系统工程师退出这个会话、下次重新登陆时,操作系统又会采用默认值。但是大部分时候系统工程师可能希望这些环境变量能够永久生效。此时就需要把这些环境变量定义在启动脚本中。
启动脚本是用户登录到Unix操作系统中第一个执行的程序。通常情况下,每个shell都需要有一个启动脚本,以用来初始化用户的使用环境。笔者现在就已profile启动脚本为例,谈谈如何通过这个脚本文件让环境变量永远有效,以及在配制过程中需要注意的地方。
一、.profile与profile 的关系。
通常情况下,在为每个用户创建帐号的时候,操作系统会在这个用户帐号的主目录下面创建一个启动脚本(.profile)文件。默认情况下,这个账户的环境变量都是保存在这个文件中。也就是说,不同的用户有不同的启动脚本,可以设置不同的环境变量。不同用户之间的环境变量是不共享的。
但是在/etc目录下面还有一个profile文件。这个文件跟用户目录下的profile文件类似,也是一个启动脚本,也可以用来保存环境变量的设置。通常情况下,操作系统启动的时候,是先执行这个脚本文件,然后再去执行用户目录下的.profile脚本文件。那么这两个启动脚本文件,对于环境变量的设置有什么不同呢?在谈这个不同之前,大家先来回顾一下在Windows操作系统中设置环境变量的时候,有“用户环境变量”与“系统环境变量”的区别。在用户环境变量中设置的环境变量,只对这个用户有效。而在系统环境变量中设置的环境变量,在对登陆到这个操作系统的所有用户都有效。其实在Unix操作系统中,这个两个脚本文件对于环境变量的设置,跟Windows操作系统差不多。在/etc/profile中设置的环境变量,是所有用户在登陆时都必须采用的环境变量,就相当于Windows操作系统中的系统环境变量,供所有用户使用。而在用户主目录下的profile启动脚本,则只对当前用户有效,这相当于Windows操作系统中的用户环境变量。
所以在环境变量设置过程中,如果系统工程师认为所有用户都需要这个环境变量,那么就需要在/etc/profile脚本文件中进行设置。相反,如果只有某个特殊的用户需要使用这个环境变量的话,那么就只对当前用户进行设置。如在Unix操作系统上部署Oracle数据库系统时,往往是创建一个Oracle用户。然后在这个用户下部署Oracle操作系统。同时必须给Oracle用户设置一个$ORACLE_HOME环境变量,否则的话,系统无法正常启动Oracle操作系统。此时该在什么地方设置这个环境变量呢?一般来说,在/etc/profile下设置环境变量的话,也未尝不可。因为在这个地方设置环境变量的话,对全体用户都有效,当然也包括Oracle用户了。但是这么操作的话,会导致一个问题。就是各个用户下跑的应用程序可能会发生相互干扰的情况。而如果只在Oracle用户下设置$ORACLE_HOME环境变量,那么对于其他用户来说是不起作用的。这就可以保障在Unix服务器操作系统上跑的各个应用相对来说是独立的。
所以系统工程师在设置环境变量的时候,如果只是个别用户使用的,那么最好是在用户主目录下的启动脚本文件中进行设置。只有那些对于全局用户都有影响的环境变量,才在/etc/profile脚本文件中进行设置,如采用的语言等等。