这几个命令基本都是跟 Linux 下的用户权限控制相关。在 Linux 中开发,是不推荐使用 root 用户直接操作的。如果直接使用 root 用户,对内:用户本身权限过大,很容易对系统误伤;对外:一旦 root 身份运行的程序被攻击了,自己机器的 root 权限就直接暴露了。

su 和 su -

su 的英文全称是 Substitute User,亦或者可以理解为 Switch User,即切换用户。
使用 su - username 或者 su username,可以切换用户。当 root 用户切换到其他用户时,不需要输入密码;当其他用户向 root 用户切换,需要输入 root 密码。
命令后边不加目标用户名时,直接使用 susu - 命令,向 root 用户切换。

  • 使用 su 命令从普通用户向root用户切换,这种方式得到一个 non-login shell,可以看到 pwd 以及 PATH 都没改变,这样仅仅是切换了 root 身份,shell环境仍然是普通用户的。
  • 使用 su - 命令,在登录和退出时可以看到 login以及logout,因为这种方式得到的是一个 login shell,pwd 和 PATH 都分别切换到了 root 用户的家目录和 PATH.

上图中我的普通用户前边没有用户标识,是由于我在用户环境下安装了Zsh.

sudo

sudo 的英文全称是 superuser user do,即使用 root 权限去执行命令。
在开发中,难免有些命令需要root权限执行,此时不建议切换root用户去执行,效率问题倒是其次,这样需要在普通用户和root用户下配置两套环境,有可能造成环境管理混乱,或者是冗余。因此建议只在普通用户下操作,使用 sudo 命令,执行需要root权限的操作。
在 Linux 中,管理 sudo 的配置文件是 /etc/sudoers,这是一个只读文件,通过命令 visudo 更改文件配置。

如果需求比较复杂的话,文件中也给出了 Host、User、Command等多种别名配置的示例,具体可以参考 /etc/sudoers 文件。

配置好之后,普通用户即可通过 sudo + command,执行一些需要 root 权限的命令,只需要输入当前用户密码,而不用输入 root 用户密码。这样无论是在安全性,还是在环境管理等方面,都有极大的益处。