什么是su?
su命令(简称是:substitute
或者 switch user
)用于切换到另一个用户,没有指定用户名,则默认情况下将以root用户登录。
为了向后兼容,su默认不改变当前目录,只设置环境变量 HOME
和 SHELL
(如果目标用户不是根用户,则加上 USER
和 LOGNAME
)。
常用选项
-
-c, --command=[command]
:指定执行的命令,然后恢复到原来的用户。 -
-, -l, --login
:将shell作为登录shell启动,其环境类似于实际登录。1. 清除所有的环境变量,除了 `TERM` 和通过 --whitelist-environment选项指定的变量。 2. 初始化环境变量:HOME, SHELL, USER, LOGNAM, PATH。 3. 变更目标用户的家目录。 4. 设置shell的第一个参数,即argv[0]为 - ,使shell成为登录shell。
-
-m, -p, --preserve-environment
:保留整个环境变量,例如,不会更新HOME
,SHELL
,USER
,LOGNAME
,此选项与--login
是互斥的,不要同时使用。 -
-s, --shell=[shell]
:切换用户后指定shell
而不是使用默认shell
,shell
使用的顺序如下:1. 通过 `--shell` 指定的优先级最高。 2. 如果 `--preserve-environment` 选项指定了,且设置了 `SHELL` 环境变量,则使用此shell。 3. 目标用户的passwd条目中列出的shell 4. 以上都没有,则默认使用 `/bin/sh`
-
-w, --whitelist-environment=[list]
:环境变量白名单,即如果指定了--login
时,不会重置白名单中指定的环境变量,但忽略HOME
、SHELL
、USER
、LOGNAME
和PATH
,list
格式通过逗号分隔, -
-h, --help
:打印帮助信息。 -
-V, --version
:打印版本信息。
使用实例
- 切换到普通用户
su - phoenix
或
su phoneix
- 切换到root用户
su -
或
su
- 切换用户时指定命令
su -c ls
su -c 'ls -l /home/username' phoenix
切换到普通用户并指定命令,命令指定了选项和参数则用引号引上。
- 切换的时候指定shell
su -s /usr/bin/zsh
- 保留环境
su -p phoenix
- 对于像
Ubuntu
没有root密码,可使用如下方式切到root
sudo su -