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

ops/2024/12/31 22:19:07/

su 命令

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

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

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

su             # 切换到 root 用户,需要 root 密码
su - user1     # 切换到 user1 用户,需要 user1 密码

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

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

sudo 命令

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

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

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

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 密码

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 环境下执行命令。

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

sudo -l 命令

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

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

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

sudo -l
# 显示当前用户有权执行的命令
# 输出类似于:允许执行的命令列表

http://www.ppmy.cn/ops/146013.html

相关文章

如何在 Ubuntu 22.04 上使用 systemctl 管理 systemd 服务教程

简介 Systemd 是许多现代 Linux 发行版提供核心功能的默认服务管理器,而 systemctl 是用户与 systemd 服务交互的方式。这使得 systemctl 成为 Linux 管理员工具箱中重要的一部分。 在本文中,我们将探讨如何使用 systemctl 在使用 systemd 的系统上执行…

微信小程序 不同角色进入不同页面、呈现不同底部导航栏

遇到这个需求之前一直使用的小程序默认底部导航栏,且小程序默认入口页面为pages/index/index,要使不同角色呈现不同底部导航栏,必须要在不同页面引用不同的自定义导航栏。本篇将结合分包(subPackages)展开以下三步叙述…

线程池基础知识

线程池: 顾名思义就是管理一系列线程的资源池。当有任务要处理时,直接从线程池中获取线程来处理,处理完之后线程并不会立即被销毁,而是等待下一个任务。 使用线程池的好处 降低资源消耗:通过重复利用已创建的线程降…

深度学习中batch_size

Batch size调整和epoch/iteration的关系 训练数据集总共有1000个样本。若batch_size10,那么训练完全体样本集需要100次迭代,1次epoch。 训练样本10000条,batchsize设置为20,将所有的训练样本在同一个模型中训练5遍,则…

uniapp 微信小程序 数据空白展示组件

效果图 html <template><view class"nodata"><view class""><image class"nodataimg":src"$publicfun.locaAndHttp()?localUrl:$publicfun.httpUrlImg(httUrl)"mode"aspectFit"></image>&l…

2024国城杯 Web

这四道题目Jasper大佬都做了镜像可以直接拉取进行复现 https://jaspersec.top/2024/12/16/0x12%20%E5%9B%BD%E5%9F%8E%E6%9D%AF2024%20writeup%20with%20docker/ n0ob_un4er 这道题没有复现成功, 不知道为啥上传了文件, 也在 /tmp目录下生成了sess_PHPSESSID的文件, 但是就是…

iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针

iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针-CSDN博客 类型含义使用场景示例nil表示一个指向 Objective - C 对象的空指针。在 Objective - C 和 Swift&#xff08;与 Objective - C 交互时&#xff09;中用于表示对象不存在。当一个对象变量没有指向任何有效的对象实例…

重启ubuntu服务器,如何让springboot服务自动运行

文章目录 1. 使用 systemd 服务步骤&#xff1a; 2. 使用 cron 的 reboot 任务步骤&#xff1a; 3. 使用 init.d 脚本&#xff08;适用于较旧版本&#xff09;步骤&#xff1a; 推荐方案 为了确保在重启Ubuntu服务器后&#xff0c;让springboot的服务test.jar象 nohup java -ja…