su 命令
基本介绍
su(Switch User)是 Linux 系统中用于切换用户身份的命令。它允许用户在当前会话中切换到另一个用户账户,包括 root 用户。su是系统管理员进行特权操作的重要工具。
资料合集:https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a
语法
su [OPTIONS] [USERNAME]常用选项
基本选项
-c, --command=COMMAND:执行指定命令后返回原用户-f, --fast:不读取启动文件(如 .bashrc)-h, --help:显示帮助信息-l, --login:模拟完整登录(读取目标用户的环境变量)-m, --preserve-environment:保留当前环境变量-p:与-m相同-s, --shell=SHELL:指定登录shell-V, --version:显示版本信息-(连字符):等同于-l选项
使用示例
1. 切换到 root 用户
su输出示例:
Password:2. 切换到指定用户
suusername3. 切换用户并模拟完整登录
su- username4. 执行单个命令后返回
su-c"command"su-c"ls -l /root"5. 切换用户不读取启动文件
su-fusername6. 切换用户并保留环境变量
su-musername7. 指定登录shell
su-s/bin/zsh username8. 切换到 root 并执行多个命令
su<<EOF echo "Current user:$(whoami)" ls -l /root EOF9. 从脚本中切换用户执行命令
#!/bin/bash# 切换到 root 用户执行命令su-c"apt-get update && apt-get upgrade -y"输出格式说明
成功执行
# 无输出,直接切换到目标用户错误输出示例
su: Authentication failure su: user 'invalid_user' does not exist切换后验证
whoami# 输出: rootid# 输出: uid=0(root) gid=0(root) groups=0(root)工作原理
切换用户的流程
# 1. 查看当前用户whoami# 2. 切换到 root(需要密码)su# 3. 输入密码后验证whoami# 4. 执行特权操作apt-getupdate# 5. 退出回到原用户exit# 6. 验证已回到原用户whoamisu 与 su - 的区别
| 特性 | su username | su - username |
|---|---|---|
| 环境变量 | 保留当前环境 | 加载目标用户环境 |
| 工作目录 | 保持不变 | 切换到目标用户主目录 |
| 启动文件 | 不读取 | 读取 .bashrc 等 |
| 登录shell | 否 | 是 |
实用技巧
在脚本中安全切换用户
#!/bin/bash# 检查是否为 rootif["$(id-u)"-ne0];thenecho"This script must be run as root"exit1fi# 切换到普通用户执行命令su- username-c"cd /home/username && git pull"使用 sudo 替代 su
# 使用 sudo 执行单条命令sudoapt-getupdate# 使用 sudo 切换到 root shellsudo-i# 使用 sudo 切换到其他用户sudosu- username检查用户是否存在
#!/bin/bashUSERNAME="john"ifid"$USERNAME"&>/dev/null;thenecho"User$USERNAMEexists"su-"$USERNAME"elseecho"User$USERNAMEdoes not exist"exit1fi批量执行命令
#!/bin/bash# 切换到 root 执行多个命令su<<EOF echo "=== Updating system ===" apt-get update apt-get upgrade -y echo "=== Cleaning up ===" apt-get autoremove -y apt-get clean echo "=== Done ===" EOF相关命令
sudo:以其他用户身份执行命令whoami:显示当前用户id:显示用户和组ID信息passwd:设置用户密码useradd:添加用户usermod:修改用户信息
注意事项
- 权限要求:切换到其他用户需要知道目标用户的密码(root 用户除外)
- root 用户:root 用户可以切换到任何用户而不需要密码
- 环境变量:使用
-选项会加载目标用户的环境变量 - 安全风险:避免在脚本中硬编码密码
- sudo 推荐:建议使用
sudo替代su进行特权操作 - PAM 认证:
su命令使用 PAM 进行认证
总结
su是 Linux 系统中用于切换用户身份的工具。它允许用户在当前会话中切换到另一个用户账户,包括 root 用户。su是系统管理员进行特权操作的重要工具,但建议使用sudo进行更安全的特权操作。