天天看点

su user与su - user的区别su

su

su(switch user)切换⽤户

普通⽤户切换到任何⽤户都需要输⼊密码

root⽤户切换到任何⽤户都不需要输⼊密码

su - username
           

su 与 su -区别

以实例说明:

[root@home ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G   48K   16G   1% /dev/shm
tmpfs            16G   58M   16G   1% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
/dev/sda1        59G   34G   24G  59% /
tmpfs           3.1G     0  3.1G   0% /run/user/0
[root@home ~]#
#如上默认系统的环境变量语言项是英文的
[root@home ~]# export LANG=zh_CN.utf8
[root@home ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
devtmpfs         16G     0   16G    0% /dev
tmpfs            16G   48K   16G    1% /dev/shm
tmpfs            16G   58M   16G    1% /run
tmpfs            16G     0   16G    0% /sys/fs/cgroup
/dev/sda1        59G   34G   24G   59% /
tmpfs           3.1G     0  3.1G    0% /run/user/0
[root@home ~]#
#如上临时设置语言为中文后,语言变为了中文
[root@home ~]# pwd
/root
[root@home ~]#
#如上此时的工作目录为/root
           
#su oracle
[root@home ~]# su oracle
[oracle@home root]$ df -h
文件系统        容量  已用  可用 已用% 挂载点
devtmpfs         16G     0   16G    0% /dev
tmpfs            16G   48K   16G    1% /dev/shm
tmpfs            16G   58M   16G    1% /run
tmpfs            16G     0   16G    0% /sys/fs/cgroup
/dev/sda1        59G   34G   24G   59% /
tmpfs           3.1G     0  3.1G    0% /run/user/0
[oracle@home root]$ pwd
/root
[oracle@home root]$
#如上su命令切换用户后工作目录没有改变,root用户下的临时环境变量设置还有效
[oracle@home root]$ sqlplus -v
bash: sqlplus: 未找到命令
[oracle@home root]$
           
#su - oracle
[root@home ~]# su - oracle
上一次登录:三 4月 20 19:44:55 CST 2022pts/11 上
[oracle@home ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs         16G     0   16G   0% /dev
tmpfs            16G   48K   16G   1% /dev/shm
tmpfs            16G   58M   16G   1% /run
tmpfs            16G     0   16G   0% /sys/fs/cgroup
/dev/sda1        59G   34G   24G  59% /
tmpfs           3.1G     0  3.1G   0% /run/user/0
[oracle@home ~]$ pwd
/home/oracle
#如上su -命令切换用户后,工作目录变为了切换后用户的家目录,root用户下的临时环境变量设置已失效,实际生效的是用户家目录下的.bash_profile环境变量
[oracle@home ~]$ sqlplus -v

SQL*Plus: Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@home ~]$ cat .bash_profile|grep ORACLE_HOME
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
[oracle@home ~]$
[oracle@home ~]$ ls -lsa $ORACLE_HOME/bin/sqlplus
28 -rwxr-xr-x. 1 oracle oinstall 24864 Apr 18  2019 /opt/oracle/product/19c/dbhome_1/bin/sqlplus
           

总结:

​ su 切换用户加"-",就不继承上一个用户shell的环境变量。

​ 也就是说:使用su命令切换用户的时候使用的还是上一个用户的环境变量,su - 切换用户后使用的是切换后用户的环境变量设置(.bash_profile)

​ 如果在写shell脚本的时候,涉及到一些环境变量,切换用户不加"-",错误的调用错误的环境变量可能就会达到一些意想不到的效果

​ 推荐切换用户使用su -命令

提示符信息

[root@home ~]#
           
[root@home ~]# whoami
root
[root@home ~]#
           
[root@home ~]# echo $PS1
[\u@\h \W]\$
[root@home ~]#
#如上\u表示的是当前连接的用户 \h表示主机名 \W表示工作目录(默认是相对路径,只有一层)
[root@home ~]# export PS1='[test@\h \W]\$'
[test@home ~]# whoami
root
[test@home ~]#
#如上将提示符中用户名部分写死,提示符就被改变了,此时只看提示符是不能确定实际的用户,还得使用whoami命令

#提示符中也是可以使用命令的,命令需要用反引号引起来,如下
[root@home ~]# export PS1="[`whoami`@`hostname`:"'$PWD]$'
[root@home:/root]$cd /root/gauss_om/
[root@home:/root/gauss_om]$
           

继续阅读