Linux_su命令
1、su
命令概述
1.1、作用
su
(substitute user
)用于直接切换用户身份,进入目标用户的 shell 环境。
1.2、密码规则
使用su
切换到目标用户,需要输入目标用户的密码,但如果是root用户切其他用户则不需要输入密码。
1.3、退出切换
输入 exit
或按 Ctrl+D
可退出当前用户环境,返回原用户。
2、su
命令的使用
su
命令的-h
如下图:
可以看到有很多选项,但下面只介绍该命令的基本用法:su [选项] [目标用户]
2.1、目标用户
要切换到的用户,不写默认是 root
。
2.2、常用选项
2.2.1、无选项切换(su [目标用户]
)
直接切换到目标用户,但不会加载目标用户的完整环境(如环境变量、~/.bashrc
等配置文件),且工作目录保持为原用户的当前目录。
示例:
# 普通用户 user 切换到 root(需输入 root 密码)
user@host:~$ su root
Password: # 输入 root 密码
root@host:/home/user# # 工作目录仍为原用户的家目录 `/home/user`
2.2.2、完整环境切换(su - [目标用户]
)
- 选项
-
(或-l
,--login
)表示“模拟登录”,会加载目标用户的完整登录环境(包括~/.bash_profile
、~/.profile
等配置文件),并将工作目录切换到目标用户的家目录(/root
或/home/目标用户
)。
这是最推荐的切换方式,因为它能保证目标用户的环境与直接登录时一致。
示例:
# 普通用户 user 切换到 root(需输入 root 密码)
user@host:~$ su - root
Password: # 输入 root 密码
root@host:~# # 工作目录切换为 root 的家目录 `/root`
2.2.3、执行单条命令(su -c "命令" [目标用户]
)
选项 -c
(--command
)允许切换到目标用户后执行一条命令,执行完毕自动返回原用户环境。
示例:
# 普通用户 user 以 root 身份执行 `ls /root` 命令(需输入 root 密码)
user@host:~$ su -c "ls /root" root
Password: # 输入 root 密码
anaconda-ks.cfg initial-setup-ks.cfg # 输出 /root 目录下的文件
与通常
sudo
执行单条指令有所不同:
sudo
需要输入的密码是当前用户的密码;su -c
需要输入的密码是目标用户的密码,也就是说切换到 root 需 root 密码,普通用户知道 root 密码,就可能滥用权限。sudo
默认不加载目标用户的环境,保持原用户的环境变量和工作目录(除非显式使用 sudo -i 或 sudo -s 模拟登录);su -c
显式切换到目标用户,加载其环境后执行命令。