su
和sudo
是两个最常用的切换到root超级用户的Linux命令。虽然看起来很像,功能上也类似,但使用上还是有不少差异。
本文介绍Linux系统su和sudo的区别,并分别给出su和sudo命令的常见用法。
su命令
su
是切换到root用户的传统命令,其主要用法是:
su
:不带参数直接输入su
将切换到root用户,需要输入root密码su -
:等同于su -l
(建议使用),切换到root用户并启用root的环境变量(等同于root身份登录)su -l 用户名
:切换到其他用户,需要输入该用户的密码。不带其他参数时等同于su - 用户
su -c '命令'
:以root用户执行命令,类似于sudo,不同之处是需要输入root密码
可以看到,su
命令主要是用来切换root身份,前提是需要知道root密码。
除了su,另一个切换身份的命令是ssh:ssh root@localhost,等同于打开新终端ssh登录
sudo命令
sudo
程序很早就出来了,但直到Ubuntu的推广才流行起来。Ubuntu安装过程中不会设置root密码,默认使用普通账户登录,sudo
便是普通账户获取root权限的命令。
sudo
和su
的区别点主要有:
su
可以不带参数执行,sudo
不行sudo
命令获取root权限时输入的是用户密码,而su
要求输入root密码;- 只有
/etc/sudo/sudoers
文件中的用户才能使用sudo
命令,任何人都可以使用su
命令 - 当root密码未设置时,
sudo
能获取root权限,su
不行 su
可以切换到其他用户登录,sudo
只能切换到root用户(sudo su -l 用户名
的方式可以,但这是su的能力)
有了sudo
,可以在不泄漏(不设置)root密码的前提下让用户执行特权命令,并且sudo提供命令历史记录,能大大提高系统的安全性,因此实践中建议使用。
和su不同,sudo命令选项丰富,下面介绍一些常见用法:
sudo 命令
:以root身份执行命令,需要注意的是命令需要默认PATH路径下,否则会出现”sudo: xxx command not found”的错误(试试sudo ll
)sudo -l
:列出可用的命令sudo -i
:以root身份登录sudo -s
:一般等同于sudo bash
,进入root环境,不改变工作目录sudo su
:以sudo
方式执行su
命令,此时输入用户密码就可以了
Ubuntu、MacOS默认没有设置root密码,谷歌云、AWS的VPS默认是普通用户密钥登录,要想切换到root环境,sudo -i
,然后输入用户密码便进入到了root环境。