su 与 su - 比较
2015-12-13 12:19
363 查看
原文地址:http://blog.chinaunix.net/uid-25557346-id-2889329.html
今天有一同事说在切换用户的时候,找不到该用户下用户命令,后来仔细检查了一下过程,发现他切换用户的时候用的命令是 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, --login make 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 执行
今天有一同事说在切换用户的时候,找不到该用户下用户命令,后来仔细检查了一下过程,发现他切换用户的时候用的命令是 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, --login make 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 执行
相关文章推荐
- Java虚拟机垃圾回收
- 新手入门yii2插件下载地址
- Cstyle的札记,Freertos内核详解,第4.3篇
- 最新Viking(维金)病毒专杀工具,纯VB编写。
- 去除UINavigationbar下边的黑线
- linux的自动化操作相关使用方法汇总(转)
- ZZULIOJ 1798: 戴姆勒的求助【数学】
- pfx证书提取公私钥的方法
- 机器人操作系统 除了Android还有一个ROS(转)
- IList,IQeurable,IEnumble和List 的区别
- socket select模型
- UVa 232 Crossword Answers (纵横字谜的答案)
- 绝对干燥:保险公司决策分析系统建设方案
- 文本挖掘之特征选择(python 实现)
- Git是个好工具(转)
- nginx编译安装与apache动静分离共存设置及负载均衡设置
- 杭电OJ 4198(广搜+优先队列~)图搜.Quick out of the Harbour
- [leetcode] 132. Palindrome Partitioning II 解题报告
- nagios二次开发(五岁以下儿童)---nagios和nagiosql关系
- 源码编译安装 MySQL 5.5.x 实践(转)