摘要:sudo和su是基于 unix 的系统中的两个重要命令,可以让您执行管理任务。虽然它们看起来很相似,但是命令sudo -i和sudo su有关键的区别。
su vs sudo
sudo 和 su 是基于 unix 的系统中的两个重要命令,可以让您执行管理任务。虽然它们看起来很相似,但是命令 sudo -i 和 sudo su 有关键的区别。
在 Unix 和类 Unix 系统中,sudo (superuser do) 允许用户以其他用户 (超级用户或 root) 的安全权限运行程序。其主要目的是提高系统安全性。您可以使用 sudo 为他们提供有限的 root 访问权限,而不是与需要执行一些管理任务的人共享 root 密码。
su (switch user),用于切换到系统中的其他用户。如果未指定用户名,su 将切换到 root 帐户。
sudo -i 命令使用 root 环境变量启动根 Shell。这类似于 root 用户登录到 shell 会话。
当你执行 sudo -i 命令,会发生以下事情:
切换到 /root 目录获取 root 用户的 shell使用 root 用户的环境变量,不保留当前用户的环境变量。sudo su 命令结合 sudo 和 su 来模拟 root 登录 shell。后面的 su 表示登录 shell,类似于 sudo 的 -i。但是,sudo su 处理用户环境的方式与 sudo -i 不同。
当你执行 sudo su – 命令,会发生以下事情:
切换到 /root 目录获取 root 用户的 shell使用 root 环境变量,并继承 su 命令的环境变量。虽然 sudo -i 和 sudo su - 都赋予 shell root 权限,但它们处理用户环境的方式不同:
(1) Shell initialization files
这些命令读取不同的 shell 初始化文件。sudo -i 读取 root 用户的 .bashrc 文件。sudo su - 读取 root 用户的 .bash_profile、.bash_logout 以及 .bashrc 文件。
(2) Environment Variables
sudo -i 仅使用 root 用户的环境变量。sudo su - 使用当前用户的环境变量,然后由 root 用户的环境变量替换。这可能导致命令行为的差异。
(3) Command History
使用 sudo -i, 命令 history 存储在 root 用户的历史记录中。使用 sudo su -,命令 history 存储在调用用户的命令历史记录中。
(4) Command Usage
酷瓜云课堂 - 开源知识付费解决方案
来源:鸠摩智首席音效师