su 与 su - 比较
原文地址:http://blog.chinaunix.net/uid-25557346-id-2889329.html
- [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 与 su - 比较的更多相关文章
- su与su-
1.Linux中的用户切换:su和su - 的区别 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户,Linu ...
- su和su - 的区别
Linux中切换用户的命令是su或su -.前天我在使用useradd这个命令时,才体会到这两者的本质区别.如图: 我首先是用su命令切换到root身份的,但是运行useradd时,出现错误:bash ...
- shell切换用户执行后面语句 su与su -的区别
关于su和su -的区别,切换用户是可以使用su tom或者su - tom来实现,但是两者有区别,su只是切换身份,但shell环境仍然是原用户的shell,su -是连用户的shell环境一起切换 ...
- Linux下su与su -命令的区别
在启动服务器ntpd服务时遇到一个问题 使用 su root 切换到root用户后,不可以使用service命令: 使用 su - 后,就可以使用service命令了. 原因: su命令和su -命令 ...
- linux中切换用户方式su和su -的区别
Using su The su command allows users to open a terminal window, and from that terminal start a sub ...
- 【转】(总结)Linux下su与su -命令的本质区别
原文网址:http://www.ha97.com/4001.html 本人以前一直习惯直接使用root,很少使用su,前几天才发现su与su -命令是有着本质区别的! 大部分Linux发行版的默认账户 ...
- 关于su和su -的区别
关于su和su -的区别,切换用户是可以使用su tom或者su - tom来实现,但是两者有区别,su只是切换身份,但shell环境仍然是原用户的shell,su -是连用户的shell环境一起切换 ...
- su;su -;sudo;sudo -i;sudo su;sudo su - 之间的区别
今天我们来聊聊su;su -;sudo;sudo -i;sudo su;sudo su -他们之间的区别. su :su 在不加任何参数,默认为切换到root用户,但没有转到root用户家目录下,也就 ...
- Linux下su 与 su - 区别
Linux中切换用户的命令是su或su -.su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell:而后者连用户和Shell环境一起切换成ro ...
- su - 和su的区别
su root和su - root: su只是切换了root身份,但Shell环境仍然是普通用户的Shell:而su -连用户和Shell环境一起切换成root身份了 推荐使用su - .
随机推荐
- 解决Android SDK下载和更新失败问题
今天更新sdk报错如下: Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-1.xml. 说dl- ...
- Gradient Domain Guided Image Filtering(梯度域导向滤波)
作者提出了一种新的梯度域引导图像滤波器,通过将明确的一阶边缘感知约束结合到现有的引导图像滤波器中. matlab代码实现 转载至:https://blog.csdn.net/majinlei121/a ...
- C++ code:for loop designs
1 用for循环编出系列图形 该图形一共10行,每一行增加一个字符,所以应循环10次,每次输出一行.其循环模式为: :i<=;++i) { 输出第i行 换行 } 我们注意到,每一行长度的变化正 ...
- Sony笔记本
关机的情况下按键盘 f2键.进菜单选更改 bios设置 修改 3个地方 进bios右移 boot上 第一项 ufei改成 legacy external device改成enabled 下面启动顺序改 ...
- 浅析微信支付:微信支付简单介绍(小程序、公众号、App、H5)
本文是[浅析微信支付]系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处. 上篇文章讲了本系列的大纲,没有看过的朋友们可以看一下. 浅析微信支付:前篇大纲 微信支付是集成在微信客户 ...
- Ubuntu 8.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解
Linux版本:Ubuntu8.04 内核版本:Linux 2.6.24 交叉编译器版本:arm-linux-gcc-3.4.1 交叉编译器下载链接: https://share.weiyun.com ...
- HDU 1029 某个数出现的次数大于等于(N+1)/2的是哪个 map水题
题意:输入n个数 n为奇数 问某个数出现的次数大于等于(N+1)/2的是 哪个 输出来Sample Input51 3 2 3 3111 1 1 1 1 5 5 5 5 5 571 1 1 1 1 1 ...
- 状压dp-----三进制
三进制的状压dp要先预处理3^n以及每一个数的每一位 例题 hdu3001 题意: 给定n 个城市已经 m 条路 以及对应路费 c,要求遍历所有城市最少的路费,每个城市不能超过2次. 题解: 看代码吧 ...
- 【AtCoder】KEYENCE Programming Contest 2019
A - Beginning 这个年份恐怕需要+2 #include <bits/stdc++.h> #define fi first #define se second #define p ...
- 图论之二分图-HihoCoder1121
题目链接:https://hihocoder.com/problemset/problem/1121 二分图的相关概念:https://blog.csdn.net/qq_36345036/articl ...