【Linux命令】su、sudo、sudo su、sudo -i、sudo -l的用法和区别

su 命令

su (Switch User切换用户),允许用户切换到另一个用户的身份,默认情况下是切换到 root 用户。

默认行为: 如果只运行 su,则系统会要求输入 root 用户的密码 来切换到 root 用户,获取管理员权限。

切换到其他用户: 也可以通过 su - username 来切换到其他用户的账户,而不仅仅是 root 用户。例如,su - user1 会切换到 user1 用户的环境。

bash 复制代码
su             # 切换到 root 用户,需要 root 密码
su - user1     # 切换到 user1 用户,需要 user1 密码

注意: su 切换用户后,将直接进入该用户的环境 (如 root 用户的环境),即可以获得该用户的所有权限 ,直到你退出(通过 exit 命令)。

默认行为 只是切换身份,并没有切换环境变量,环境变量依然是普通用户的,所以"-"不能省略,不然有些操作无法执行。

sudo 命令

sudo (Super User Do ),允许普通用户以管理员权限 (root 权限)执行特定命令,但并不切换到 root 用户的环境

权限控制: sudo 是基于配置文件 /etc/sudoers 来控制的,系统管理员可以配置哪些用户可以执行哪些命令,并且可以设定是否需要输入密码。

临时获得 root 权限 :使用 sudo 执行命令时,只需要输入自己的用户密码 (而不是 root 密码),并且只对当前命令有效

bash 复制代码
sudo ls /root       # 以 root 权限列出 /root 目录的内容
sudo rm -rf /dir    # 以 root 权限删除目录 /dir

注意: sudo 只会执行单个命令 ,并且执行命令后会退出 root 权限 。如果想要连续执行多个 root 权限的命令,通常会使用 sudo -i 来打开一个 root shell

sudo su 命令

sudo su 是一个组合命令 ,首先使用 sudo 提升权限 ,然后执行 su 切换用户的操作。其行为是以普通用户的身份通过 sudo 获取 root 权限,然后运行 su 切换到 root 用户的 shell。

用途: 如果想要临时获得 root 用户的环境 ,并且需要在该环境中执行多个命令 时,sudo su 比单纯的 su 更方便,因为不需要输入 root 密码

bash 复制代码
sudo su  # 以 root 权限进入 root 用户环境

注意: sudo su 和直接执行 su 有不同之处,sudo su 会让以当前用户(具有 sudo 权限的用户)的身份来执行 su ,而 su 需要你输入 root 密码。 使用 sudo su 时,你的 sudo 配置文件会决定是否允许你执行这个命令。如果你没有 sudo 权限,无法使用 sudo su。

sudo -i 命令

sudo -i 选项用于以 root 用户身份 打开一个交互式 shell(即获取一个 root 用户的终端环境)。这意味着你将进入一个新的 shell,模拟 root 用户的登录环境。

用途: 当你需要执行多个命令,且希望在 root 用户环境中执行时,可以使用 sudo -i。它不仅提升了你当前命令的权限 ,还切换到了 root 用户的环境

**行为:**执行 sudo -i 时,sudo 会:

1.启动一个新的 shell(类似于 su 命令的行为)。

2.设置 root 用户的环境变量(如 PATH)。

3.你不需要每次执行命令时都输入 sudo,可以直接在 root 环境下执行命令。

bash 复制代码
sudo -i
# 进入 root 用户的 shell,模拟 root 用户的环境
# 你现在可以在 root 用户环境下执行多个命令,直到退出该 shell

sudo -l 命令

sudo -l 选项用于列出当前用户能够以 sudo 权限执行的所有命令。它会显示 /etc/sudoers 配置文件中,当前用户被允许执行的命令和权限。

用途: sudo -l 主要用于查看当前用户的 sudo 权限,了解哪些命令是允许执行的,哪些命令需要管理员批准。

行为: 执行 sudo -l 时,sudo 会显示当前用户可以执行的命令列表 ,和它们所需的权限(例如是否需要输入密码)。 如果用户有权限执行某些命令,它会列出允许的命令。如果没有权限执行任何命令,则会提示"没有权限"。

bash 复制代码
sudo -l
# 显示当前用户有权执行的命令
# 输出类似于:允许执行的命令列表
相关推荐
霍格沃兹测试开发学社测试人社区6 分钟前
如何利用 Jenkins 实现高效的邮件告警
运维·软件测试·测试开发·jenkins
C语言扫地僧18 分钟前
Linux 多线程(理论+实践)
linux·运维·服务器·学习
苹果醋344 分钟前
Golang的容器编排实践
运维·vue.js·spring boot·nginx·课程设计
USE-jx1 小时前
ubuntu22.04录屏黑屏,飞书共享屏幕黑屏问题
linux·飞书
深鱼~1 小时前
香橙派Zero3上搭建Code Server开发环境轻量级远程开发新体验
服务器·数据库·面试·职场和发展·智能手机
wanhengidc1 小时前
江苏超算数据中心都有哪些作用?
服务器·网络·数据中心
一只小爪子1 小时前
vim 的基础使用
linux·编辑器·vim
whoami-42 小时前
简单使用linux
linux·运维·服务器
fnd_LN2 小时前
Linux硬盘分区 --- 挂载分区mount、卸载分区umount、永久挂载
linux·运维·服务器
风车带走过往2 小时前
服务器等保测评日志策略配置
运维·服务器