分类: LINUX
2011-09-21 22:13:25
再用 su - oracle 把环境变量重定向到/tmp/2中
比较上面2个过程,可以发现当使用su oracle 的时候,目录没有改变,而且PATH的变量也没改变,
用diff /tmp/1 /tmp/2 比较2个环境变量
这里可以很清楚的看到当使用 su oracle 的使用,oracle 用户下的环境变量很多都没加载进来,可su - oracle都吧环境变量都加载了呢,这是为什么呢?
我们 man su 一下, -, -l, --login make the shell a login shell 大概意思就是用su - 的时候要执行一下登陆的shell脚本,我们都知道在用户登陆过程中用/etc/profile,.bash_profile,.bashrc,/etc/bashrc 这些脚本来决定环境变量,下面再做个测试:
在root用户下,
现在我们改变下/etc/profile 中HISTSIZE 变量的值 改成500,
然后su oracle,
su - oracle 呢?
HISTSIZE 变量值变了。
通过以上比较我们发现用su - 就相当于一个完整的登陆过程,而su 只是简单的把用户切换过去,一些环境变量什么的都没带过去。。。
最后加上:login shell , /etc/profile,.bash_profile,.bashrc,/etc/bashrc 都执行
non login shell, /etc/profile,.bash_profile 不执行, .bashrc,/etc/bashrc 执行