Chinaunix首页 | 论坛 | 博客
  • 博客访问: 997102
  • 博文数量: 829
  • 博客积分: 9980
  • 博客等级: 中将
  • 技术积分: 5020
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-29 14:06
文章分类

全部博文(829)

文章存档

2011年(1)

2008年(828)

我的朋友

分类: LINUX

2008-08-29 14:16:15

 
利用普通帐户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=“Helloliusu”,给root也设置HELLO="Helloroot",结果通过su登录root后读取HELLO变量的结果是Helloroot.)

  


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

  针对用户修改:

  修改~/.bashrc~/.bash_profie

  系统是:Debian4.0。

迷惑的Linux环境变量迷惑的Linux环境变量迷惑的Linux环境变量迷惑的Linux环境变量迷惑的Linux环境变量迷惑的Linux环境变量迷惑的Linux环境变量迷惑的Linux环境变量迷惑的Linux环境变量迷惑的Linux环境变量
阅读(740) | 评论(0) | 转发(0) |
0

上一篇:读书笔记:linux常用命令

下一篇:请教高手

给主人留下些什么吧!~~