linux关闭防火墙时出现问号乱码,linux文件名乱码问题的解决方...-tcp_wrappers防火墙配置方法-su 与 su - 的比较_169IT.COM...

在以普通用户登录系统后,需要用su切换至管理员权限。

今天有一同事说在切换用户的时候,找不到该用户下用户命令,后来仔细检查了一下过程,发现他切换用户的时候用的命令是 su oracle,以前我们切换用户的时候是su - oracle ,只知道要这样用,不清楚为什么要这么用,今天我仔细研究了他们的区别,以下是研究的过程:

先用su oracle并且把环境变量重定向到/tmp/1 中

[root@stream ~]# su oracle

[oracle@stream root]$ env >>/tmp/1

再用 su - oracle 把环境变量重定向到/tmp/2中

[root@stream ~]# su - oracle

[oracle@stream ~]env >>/tmp/2

比较上面2个过程,可以发现当使用su oracle 的时候,目录没有改变,而且PATH的变量也没改变,用diff /tmp/1 /tmp/2 比较2个环境变量

[oracle@stream tmp]$ diff 1 2

4,6c4

< HISTSIZE=1000

< SSH_CLIENT=200.120.75.211 1765 22

< SSH_TTY=/dev/pts/1

---

> HISTSIZE=500

9,11c7,11

< PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

< MAIL=/var/spool/mail/root

< PWD=/root

---

> ORACLE_SID=orcl

> ORACLE_BASE=/DBSoftware/app/oracle

> LD_LIBARY_PATH=/DBSoftware/app/oracle/product/10.2.0/db_1/lib

> MAIL=/var/spool/mail/oracle

> PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/bin:/DBSoftware/app/oracle/product/10.2.0/db_1/bin

12a13

> PWD=/tmp

14a16

> SHLVL=1

16d17

< SHLVL=2

19d19

< SSH_CONNECTION=200.120.75.211 1765 200.120.75.214 22

20a21

> ORACLE_HOME=/DBSoftware/app/oracle/product/10.2.0/db_1

22a24

> OLDPWD=/home/oracle

[oracle@stream tmp]$ diff 1 2

4,6c4

< HISTSIZE=1000

< SSH_CLIENT=200.120.75.211 1765 22

< SSH_TTY=/dev/pts/1

---

> HISTSIZE=500

9,11c7,11

< PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

< MAIL=/var/spool/mail/root

< PWD=/root

---

> ORACLE_SID=orcl

> ORACLE_BASE=/DBSoftware/app/oracle

> LD_LIBARY_PATH=/DBSoftware/app/oracle/product/10.2.0/db_1/lib

> MAIL=/var/spool/mail/oracle

> PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/bin:/DBSoftware/app/oracle/product/10.2.0/db_1/bin

12a13

> PWD=/tmp

14a16

> SHLVL=1

16d17

< SHLVL=2

19d19

< SSH_CONNECTION=200.120.75.211 1765 200.120.75.214 22

20a21

> ORACLE_HOME=/DBSoftware/app/oracle/product/10.2.0/db_1

22a24

> OLDPWD=/home/oracle

[oracle@stream tmp]$

这里可以很清楚的看到当使用 su oracle 的使用,oracle 用户下的环境变量很多都没加载进来,可su - oracle都吧环境变量都加载了呢,这是为什么呢?

我们 man su 一下, -, -l, --loginmake the shell a login shell 大概意思就是用su - 的时候要执行一下登陆的shell脚本,我们都知道在用户登陆过程中用/etc/profile,.bash_profile,.bashrc,/etc/bashrc这些脚本来决定环境变量,下面再做个测试:

在root用户下,

[root@stream ~]# echo $HISTSIZE

1000

现在我们改变下/etc/profile 中HISTSIZE 变量的值 改成500,

[root@stream ~]# grep HISTSIZE /etc/profile

HISTSIZE=500

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

然后su oracle,

[root@stream ~]# su oracle

[oracle@stream root]$ echo $HISTSIZE

1000

[oracle@stream root]$

su - oracle 呢?

[root@stream ~]# su - oracle

[oracle@stream ~]$ echo $HISTSIZE

500

HISTSIZE 变量值变了。

通过以上比较我们发现用su - 就相当于一个完整的登陆过程,而su只是简单的把用户切换过去,一些环境变量什么的都没带过去。

最后加上:login shell , /etc/profile,.bash_profile,.bashrc,/etc/bashrc 都执行

non login shell, /etc/profile,.bash_profile 不执行, .bashrc,/etc/bashrc 执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值