之前一直对 su
和 sudo
这两个命令犯迷糊,最近专门搜了这方面的资料,总算是把两者的关系以及用法搞清楚了,这篇文章来系统总结一下。
1. 准备工作
因为本篇博客中涉及到用户切换,所以我需要提前准备好几个测试用户,方便后续切换。
Linux 中新建用户的命令是 useradd
,一般系统中这个命令对应的路径都在 PATH
环境变量里,如果直接输入 useradd
不管用的话,就用绝对路径名的方式:/usr/sbin/useradd
useradd
新建用户命令只有 root 用户才能执行,我们先从普通用户 ubuntu 切换到 root 用户(如何切换后文会介绍):
ubuntu@VM-0-14-ubuntu:~$ su -
Password: # 输入 root 用户登录密码
root@VM-0-14-ubuntu:~# useradd -m test_user # 带上 -m 参数
root@VM-0-14-ubuntu:~# ls /home
test_user ubuntu # 可以看到 /home 目录下面有两个用户了
因为还没有给新建的用户 test_user
设置登录密码,这就导致我们无法从普通用户 ubuntu 切换到 test_user,所以接下来,我们需要用 root 来设置 test_user 的登录密码。需要用到 passwd
命令:
root@VM-0-14-ubuntu:~# passwd test_user
Enter new UNIX password: # 输出 test_user 的密码
Retype new UNIX password:
passwd: password updated successfully
root@VM-0-14-ubuntu:~#
接着我们输入 exit
退出 root 用户到 普通用户 ubuntu:
root@VM-0-14-ubuntu:~# exit
logout
ubuntu@VM-0-14-ubuntu:~$
可以看到,命令提示符前面已经由 root
变成 ubuntu
,说明我们现在的身份是 ubuntu
用户。
2. su 命令介绍及主要用法
首先需要解释下 su
代表什么意思。
之前一直以为 su
是 super user
,查阅资料之后才知道原来表示 「switch user
」。
知道 su
是由什么缩写来的之后,那么它提供的功能就显而易见了,就是「切换用户」。
2.1 -
参数
su
的一般使用方法是:
su <user_name>
或者
su - <user_name>
两种方法只差了一个字符 -
,会有比较大的差异:
如果加入了 -
参数,那么是一种 login-shell
的方式,意思是说切换到另一个用户 <user_name> 之后,当前的 shell 会加载 <user_name> 对应的环境变量和各种设置;
如果没有加入 -
参数,那么是一种 non-login-shell
的方式,意思是说我现在切换到了 <user_name>,但是当前的 shell 还是加载切换之前的那个用户的环境变量以及各种设置。
光解释会比较抽象,我们