linux sudo su su - 三者区别

在 Linux 中,sudo、su 和 su - 都与权限切换相关,但用途和效果不同


1. sudo

普通用户执行特权命令

bash 复制代码
sudo command
以 root 权限执行单条命令

需要输入 当前用户的密码

权限由 /etc/sudoers 文件控制

执行后环境变量保持当前用户不变

示例:

bash 复制代码
sudo apt update  # 以 root 权限更新软件包列表

2. su (Switch User)

切换到其他用户(默认 root)

bash 复制代码
su [用户名]
切换到指定用户(不指定则切换到 root)

需要输入 目标用户的密码

保持 当前的工作目录和环境变量

主要用于用户身份切换

示例:

bash 复制代码
su          # 切换到 root(需 root 密码)
su alice    # 切换到用户 alice(需 alice 的密码)

3. su - (su + 登录 shell)

切换到其他用户的登录环境

bash 复制代码
su - [用户名]
连字符 - 或 -l 表示登录 shell

需要输入 目标用户的密码

切换到目标用户的 家目录

加载目标用户的 完整环境变量(~/.bashrc, ~/.profile 等)

类似于重新登录

示例:

bash 复制代码
su -        # 切换到 root 的登录环境
su - alice  # 切换到 alice 的登录环境

对比表格

命令 需要密码 环境变量 工作目录 典型用途
sudo cmd 当前用户密码 当前用户环境 当前目录 临时执行特权命令
su 目标用户密码 当前用户环境 当前目录 切换用户身份但保持环境
su - 目标用户密码 目标用户环境 目标用户家目录 完全切换到目标用户环境

使用建议

  • 日常管理 :使用 sudo 执行单条特权命令(更安全,有操作日志)

  • 需要 root shell :使用 sudo -i 或 sudo su -(比直接 su - 更安全)

  • 完全切换用户环境 :使用 su - username

  • 临时切换身份 :使用 su username


安全提示

bash 复制代码
# 推荐的安全做法:
sudo -i          # 切换到 root 的登录环境(使用当前用户密码)
sudo -u alice bash  # 以 alice 身份启动 shell

# 不推荐(除非必要):
直接使用 root 密码通过 su/su - 切换

最佳实践 :配置 sudo 权限给普通用户,避免共享 root 密码,使用 sudo 代替直接 su 到 root。

相关推荐
爱和冰阔落1 小时前
【Linux网络】TCP 半包粘包怎么解决?从长度报头、JSON 拆包到网络计算器完整实战
linux·运维·网络·tcp/ip
say_fall3 小时前
【Linux网络编程】UDP套接字编程:系统编程组件、基础回显服务、InetAddr与地址转换、翻译服务与线程池聊天室
linux·服务器·网络·udp·vr
ö Constancy3 小时前
一台电脑的硬件组成与作用:按功能分类详解(Windows 与 Linux 视角)
linux·windows·电脑
江湖有缘3 小时前
基于Ubuntu部署SoduWork:企业级 AI 原生协同平台实战全流程
linux·人工智能·ubuntu·ai·soduwork
无奈笑天下12 小时前
银河麒麟上nproc命令教程详解
linux·运维·服务器
Rabitebla15 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
火云代理16 小时前
更换网络后为什么会退出登录?分清 IP、Cookie 与会话的关系
服务器·网络·网络协议·tcp/ip·php·ip
威嵌神州16 小时前
嵌入式排故实录:高并发下串口数据“超时丢包”的根因剖析与架构优化
运维·服务器·嵌入式硬件·缓存
Decay__17 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
java_logo17 小时前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像