su是switch user切换用户的缩写,su命令允许切换到其它用户,默认是root用户。
在本教程中,我们将说明如何使用su
命令切换用户。包括su的命令语法与常见的选项,sudo与su命令的区别,在切换用户时并留在当前的目录中。
su命令的一般语法是su [OPTIONS] [USER [ARGUMENT...]]
。在不带任何选项运行su命令,su
命令默认行为是以root用户运行交互式的shell程序。
系统将提示您输入root密码,如果通过身份验证,运行命令的用户将临时成为root。
并使用/etc/passwd
设置shell程序和家目录等环境变量设置当前会话环境变量信息,但当前目录并不会改变。
如果需要确认当前用户是否已更改,运行whoami
命令。该命令将打印运行当前Shell命令用户名称。
su
whoami
root
su 切换用户
运行su
命令时最常用的选项是-
,-l
,--login
。-
选项会使当前shell成为登录shell,其环境变量与以用户真实登录相似,并且更改当前工作目录。
如果要运行另一个shell程序,而不是passwd
文件中定义的shell,请使用-s
/--shell
选项。
例如命令su -s /usr/bin/zsh
将会切换到root用户并使用zsh
作为登录shell。
su -
su -s /usr/bin/zsh
要保留之前用户的环境变量,例如HOME
,SHELL
,USER
和LOGNAME
等,请使用-p
/--preserve-environment
选项运行su命令。
在使用-
选项时,将会隐式忽略-p
选项。也就是-
选项优先,-
选项默认会改变当前shell会话环境变量。
很多时候,我们都会使用-
选项而不是-p选项运行su命令。因为运行的命令很多都会依赖环境变量确认执行的流程。
su -p
如果只是切换用户运行命令,而不启动交互式shell会话。换句话说,就是启动一个以其它用户的运行的shell子进程,但不能与子shell进程进行交互。
su
命令的-c
,--command
选项允许你以其它用户启动shell的子进程。例如命令su -c ps
将以root用户身份运行ps
命令。
要切换到另一个用户,请将用户名作为参数传递给su
。例如命令su - myfreax
将会切换到用户myfreax。
su -c ps
su myfreax
sudo vs su
在某些Linux发行版上,如Ubuntu出于安全原因,默认禁用root用户。这意味着没有为root设置密码,并且您不能使用su
切换到root。
切换为root用户的另一个选项是在su
命令前加上sudo
,然后输入当前登录用户的密码。sudo
命令允许您以其他用户运行命令。默认root运行su
命令。
sudo su -
使用的是用户密码,su -
则使用的是root用户的密码。sudo命令与-i
选项一起使用时,将在root用户的环境中运行交互式登录Shell。
sudo -i
与运行su -
基本相同。与su
相比,使用sudo
的优势在于无需在多个用户之间共享root密码。此外,sudo
还允许用户以root运行指定的命令。
sudo su -
sudo -i
结论
su
可让您临时成为另一个用户并使用当前用户环境运行命令。如果您有任何疑问或反馈,请随时发表评论。