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

要保留之前用户的环境变量,例如HOMESHELLUSERLOGNAME等,请使用-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可让您临时成为另一个用户并使用当前用户环境运行命令。如果您有任何疑问或反馈,请随时发表评论。