• su 与 su


    原文地址:http://blog.chinaunix.net/uid-25557346-id-2889329.html

      今天有一同事说在切换用户的时候,找不到该用户下用户命令,后来仔细检查了一下过程,发现他切换用户的时候用的命令是 su oracle,以前我们切换用户的时候是su - oracle ,只知道要这样用,不清楚为什么要这么用,今天我仔细研究了他们的区别,以下是研究的过程:
       先用su oracle  并且把环境变量重定向到/tmp/1 中
      
    1. [root@stream ~]# su oracle
    2. [oracle@stream root]$ env >>/tmp/1

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

    1. [root@stream ~]# su - oracle
    2. [oracle@stream ~]env >>/tmp/2

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

    用diff /tmp/1 /tmp/2 比较2个环境变量

    1. [oracle@stream tmp]$ diff 1 2
    2. 4,6c4
    3. < HISTSIZE=1000
    4. < SSH_CLIENT=200.120.75.211 1765 22
    5. < SSH_TTY=/dev/pts/1
    6. ---
    7. > HISTSIZE=500
    8. 9,11c7,11
    9. < PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    10. < MAIL=/var/spool/mail/root
    11. < PWD=/root
    12. ---
    13. > ORACLE_SID=orcl
    14. > ORACLE_BASE=/DBSoftware/app/oracle
    15. > LD_LIBARY_PATH=/DBSoftware/app/oracle/product/10.2.0/db_1/lib
    16. > MAIL=/var/spool/mail/oracle
    17. > PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/bin:/DBSoftware/app/oracle/product/10.2.0/db_1/bin
    18. 12a13
    19. > PWD=/tmp
    20. 14a16
    21. > SHLVL=1
    22. 16d17
    23. < SHLVL=2
    24. 19d19
    25. < SSH_CONNECTION=200.120.75.211 1765 200.120.75.214 22
    26. 20a21
    27. > ORACLE_HOME=/DBSoftware/app/oracle/product/10.2.0/db_1
    28. 22a24
    29. > OLDPWD=/home/oracle
    30. [oracle@stream tmp]$ diff 1 2
    31. 4,6c4
    32. < HISTSIZE=1000
    33. < SSH_CLIENT=200.120.75.211 1765 22
    34. < SSH_TTY=/dev/pts/1
    35. ---
    36. > HISTSIZE=500
    37. 9,11c7,11
    38. < PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    39. < MAIL=/var/spool/mail/root
    40. < PWD=/root
    41. ---
    42. > ORACLE_SID=orcl
    43. > ORACLE_BASE=/DBSoftware/app/oracle
    44. > LD_LIBARY_PATH=/DBSoftware/app/oracle/product/10.2.0/db_1/lib
    45. > MAIL=/var/spool/mail/oracle
    46. > PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/bin:/DBSoftware/app/oracle/product/10.2.0/db_1/bin
    47. 12a13
    48. > PWD=/tmp
    49. 14a16
    50. > SHLVL=1
    51. 16d17
    52. < SHLVL=2
    53. 19d19
    54. < SSH_CONNECTION=200.120.75.211 1765 200.120.75.214 22
    55. 20a21
    56. > ORACLE_HOME=/DBSoftware/app/oracle/product/10.2.0/db_1
    57. 22a24
    58. > OLDPWD=/home/oracle
    59. [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用户下,

    1. [root@stream ~]# echo $HISTSIZE
    2. 1000

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

    1. [root@stream ~]# grep HISTSIZE /etc/profile
    2. HISTSIZE=500
    3. export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

        然后su oracle,

    1. [root@stream ~]# su oracle
    2. [oracle@stream root]$ echo $HISTSIZE
    3. 1000
    4. [oracle@stream root]$

       su - oracle 呢?

    1. [root@stream ~]# su - oracle
    2. [oracle@stream ~]$ echo $HISTSIZE
    3. 500

      HISTSIZE 变量值变了。

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

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

  • 相关阅读:
    [Leetcode][Python]29: Divide Two Integers
    [Leetcode][Python]28: Implement strStr()
    [Leetcode][Python]27: Remove Element
    前端笔记(百度)
    关于html5新增的功能(百度)
    一些我容易混淆的知识(关于数组的操作、对字符串的操作)
    web前端~~浏览器兼容问题(百度)
    关于前端的性能优化问题
    封装ajax(二)闭包的形式
    封装ajax
  • 原文地址:https://www.cnblogs.com/AloneSword/p/5042537.html
Copyright © 2020-2023  润新知