红联Linux门户
Linux帮助

迷惑的Linux环境变量

发布时间:2007-06-24 17:13:56来源:红联作者:Feedback
  利用普通帐户Liusu的身份下载了一个Tomcat包,进入bin目录,开始运行,./startup.sh启动正常。

  然后su到root用户,因为我想root没有设置JAVA_HOME环境变量,所以./startup.sh应该是不能运行的,可是结果出乎我的意料,Tomcat正常启动了,以root用户运行了,不能相信,以root运行printenv,发现竟然存在JAVA_HOME变量。这就奇怪了去了。我猜想是不是root用户能够读取所有用户的环境变量设置,于是新加了一个用户tom,然后在给tom设置一个环境变量HELLO,重新回到root,运行$HELLO,得不的结果,说明我的猜想 root用户会共享所有用户的环境变量是个错误的假设。

  经过分析和检测,发现问题出在我登录root的方式上,我是通过一个liusu用户的终端并通过su来登录root用户的,这个过程环境变量的设置如下:

  1:当打开这个终端的时候,是以liusu用户登录的,当前的这个BASH已经读取了所有给liusu用户设置的变量。比如JAVA_HOME等

  2:当通过su登录root用户的时候,继续读取root用户的变量设置,如果存在同样的变量名称,则对root读取的变量会取代读取liusu变量时候的设置。比如新的root的PATH会取代旧的取得的PATH变量,如果root变量没有的,而liusu有的变量,则继续保持,如JAVA_HOME。(这就是为什么在root运行java命令的时候,出来的是gcj版本而在liusu运行java,出来的是正常java。因为我们为liusu用户设置的PATH包含了JAVA_HOME/bin,而root用户PATH没有设置)

  3:也就是说,通过su登录的时候,当前的bash的环境变量会是root与原来用户(这里是liusu)的变量的交集。(继续作个实验,给liusu设置一个变量HELLO=“Hello liusu”,给root也设置HELLO="Hello root",结果通过su登录root后读取HELLO变量的结果是Hello root.)

  


  另外,设置环境变量:
  全局设置:
  直接修改 /etc/profile

  针对用户修改:

  修改 ~/.bashrc ~/.bash_profie

  系统是:Debian 4.0。
文章评论

共有 0 条评论