susu -都是用来切换用户的命令,简单说它们之间的区别就是:su -切换的干净彻底,而su

切换用户却拖泥带水。

su

su username,切换到指定用户,但是当前目录不会变化,环境变量还是上一个用户的环境变量。

su -

su - username,切换到指定用户,当前目录即刻切换成指定用户的家目录,即~环境变量

即刻切换到指定目录的环境变量。

测试环境

测试环境是CentOS6.9_64位,系统中有两个用户oldboy和root

oldboy的环境变量和家目录如下

  1. [oldboy@as4k ~]$ echo ~
  2. /home/oldboy
  3. [oldboy@as4k ~]$ echo $PATH
  4. /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin
  5. [oldboy@as4k ~]$

root用户的环境变量和家目录如下

  1. [root@as4k ~]# echo ~
  2. /root
  3. [root@as4k ~]# echo $PATH
  4. /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  5. [root@as4k ~]#

测试效果

root -> oldboy (su -)

  1. [root@as4k ~]# pwd && echo $PATH
  2. /root
  3. /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  4. [root@as4k ~]# su - oldboy
  5. [oldboy@as4k ~]$ pwd && echo $PATH
  6. /home/oldboy
  7. /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin

oldboy -> root (su -)

  1. [oldboy@as4k ~]$ pwd && echo $PATH
  2. /home/oldboy
  3. /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin
  4. [oldboy@as4k ~]$ su - root
  5. Password:
  6. [root@as4k ~]# pwd && echo $PATH
  7. /root
  8. /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

root -> oldboy (su)

  1. [root@as4k ~]# pwd && echo $PATH
  2. /root
  3. /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  4. [root@as4k ~]# su oldboy
  5. [oldboy@as4k /root]$ pwd && echo $PATH
  6. /root
  7. /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

oldboy -> root (su)

  1. [oldboy@as4k ~]$ pwd && echo $PATH
  2. /home/oldboy
  3. /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin
  4. [oldboy@as4k ~]$ su root
  5. Password:
  6. [root@as4k /home/oldboy]# pwd && echo $PATH
  7. /home/oldboy
  8. /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin

结论

切换用户尽量使用su -,干净彻底,符合人类认知。

问题: 一不小心使用su切换了用户,傻傻分不清自己到底用的是哪个环境,怎么办?

解决: 使用su - username 再切换一次,即使自己已经是oldboy用户,还是可以su - oldboy

再切换一次,以达到更改操作环境的目的。

  1. [oldboy@as4k ~]$ pwd && echo $PATH
  2. /home/oldboy
  3. /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin
  4. [oldboy@as4k ~]$ su root
  5. Password:
  6. [root@as4k /home/oldboy]# pwd && echo $PATH
  7. /home/oldboy # what ? 我的环境乱了
  8. /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/oldboy/bin
  9. [root@as4k /home/oldboy]# su - root
  10. [root@as4k ~]# pwd && echo $PATH
  11. /root # ok 回到了熟悉的环境
  12. /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

su 与 su - 区别的更多相关文章

  1. su su- sudo的区别

    linux su命令参数及用法详解(linux切换用户命令) su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码   linux su 命令 建议大家切换用户的时候 使用 su ...

  2. su和su - 的区别

    Linux中切换用户的命令是su或su -.前天我在使用useradd这个命令时,才体会到这两者的本质区别.如图: 我首先是用su命令切换到root身份的,但是运行useradd时,出现错误:bash ...

  3. shell切换用户执行后面语句 su与su -的区别

    关于su和su -的区别,切换用户是可以使用su tom或者su - tom来实现,但是两者有区别,su只是切换身份,但shell环境仍然是原用户的shell,su -是连用户的shell环境一起切换 ...

  4. Linux 系统中用户切换(su user与 su - user 的区别)

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

  5. Linux下su与su -命令的区别

    在启动服务器ntpd服务时遇到一个问题 使用 su root 切换到root用户后,不可以使用service命令: 使用 su - 后,就可以使用service命令了. 原因: su命令和su -命令 ...

  6. 【转】(总结)Linux下su与su -命令的本质区别

    原文网址:http://www.ha97.com/4001.html 本人以前一直习惯直接使用root,很少使用su,前几天才发现su与su -命令是有着本质区别的! 大部分Linux发行版的默认账户 ...

  7. 关于su和su -的区别

    关于su和su -的区别,切换用户是可以使用su tom或者su - tom来实现,但是两者有区别,su只是切换身份,但shell环境仍然是原用户的shell,su -是连用户的shell环境一起切换 ...

  8. su;su -;sudo;sudo -i;sudo su;sudo su - 之间的区别

    今天我们来聊聊su;su -;sudo;sudo -i;sudo su;sudo su -他们之间的区别. su :su 在不加任何参数,默认为切换到root用户,但没有转到root用户家目录下,也就 ...

  9. Linux下su 与 su - 区别

    Linux中切换用户的命令是su或su -.su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell:而后者连用户和Shell环境一起切换成ro ...

  10. 深入理解 sudo 与 su 之间的区别【转】

    深入理解 sudo 与 su 之间的区别 两个命令的最大区别是: sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码.另外一个区别是其默认行为.sudo 命令只允许使用提升 ...

随机推荐

  1. HeadFisrt 设计模式03 装饰者

    类应该对扩展开放, 对修改关闭. 所谓装饰者模式, 是指用其他的类来装饰某个类, 装饰者说白了就是使用 has-a 来代替 is-a 隐喻 咖啡店, 有很多种咖啡, 咖啡里还要增加一些 milk, 面 ...

  2. Nginx服务器防止被压力测试

    最近经常用人帮忙做压力测试,用webbech或者ab等一些工具模拟并发压服务器,若服务器没有限制连接数或带宽,服务器很容易被压跨.cat nginx.conf…http {…limit_conn_zo ...

  3. EJB类库存在于Java的哪个版本中?(选择1项)。

    A. J2SE B. J2EE C. J2ME D. J2NE 解答:B

  4. VS2008链接错误fatal error LNK1104: cannot open file '*.obj'

    This particular issue is caused by specifying a dependency to a lib file that had spaces in its path ...

  5. JSON.parse() 和 JSON.stringify() 的区别

    JSON.parse()与JSON.stringify()的区别   JSON.parse()[从一个字符串中解析出json对象] //定义一个字符串 var data='{"name&qu ...

  6. Visio2010如何安装

    双击setup.   点击我接受此协议的条款,然后点击继续.   这里选择自定义,很重要哦,不要选择立即安装,不然,一会装完后,你会找不到快捷方式的.   文件位置这里选择好存放路径,一会我们要去这里 ...

  7. ionic ui 框架

    直接看着这写就行了 http://ionicframework.com/docs/components/

  8. 160418、ztree权限菜单

    1.页面中引用ztree的css和js(大家自行下载ztree) <link rel="stylesheet" href="${ctx}/resources/js/ ...

  9. Hadoop单点伪分布模式安装

    Hadoop单点伪分布模式安装 概述 单点 single-node,单节点,即一台计算机. 伪分布式模式 pseudo-distributed mode 所谓集群,表面上看是多台计算机联合完成任务:但 ...

  10. mysqldump备份成压缩包

    可以直接应用mysqldump直接将mysql数据库中的表或者整个数据库备份成压缩格式的包 废话不多说了直接上代码吧 mysqldump -h localhost -uroot -pHb118114  ...