- 核心概念:用户身份
su命令详解- 基本用法
- 高级用法(选项)
- 安全风险
sudo命令详解- 为什么需要
sudo - 基本用法
sudo的核心优势
- 为什么需要
ps命令详解- 为什么需要
ps - 基本用法(查看当前用户进程)
- 进程树(
ps auxf) - 关键选项详解
- 为什么需要
ps与su/sudo的结合使用- 查看当前用户的进程
- 查看其他用户的进程(需要
sudo) - 切换到 root 后查看所有进程
- 总结与最佳实践
核心概念:用户身份
在 Linux 系统中,每个进程都在特定的用户身份下运行,这决定了该进程对文件、系统资源的访问权限。

- 普通用户:权限有限,只能操作自己的文件和被授权的资源。
- 超级用户:用户名通常是
root,拥有系统的最高权限,可以执行任何操作,包括修改系统文件、停止服务等。
su 和 sudo 的核心目的,就是让你能够临时地以其他用户(通常是 root)的身份来执行命令。
su 命令详解 (Switch User)
su 的全称是 "Switch User",用于从一个用户切换到另一个用户。
基本用法
# 切换到 root 用户 su # 或者更明确地 su - # 切换到指定用户,'oracle' su oracle
命令执行后的行为:
su:执行后,系统会提示你输入目标用户的密码,如果你不指定用户,默认是root。su -或su -l:这是一个“登录式切换”,它不仅切换了用户身份,还会加载目标用户的环境变量(如.bashrc,.profile等),让你感觉像是真正登录到了那个用户账户。强烈推荐使用su -,因为它能提供一个干净、独立的环境,避免环境变量污染导致的问题。
退出:切换后,你可以通过输入 exit 命令或按 Ctrl + D 返回到原来的用户身份。

高级用法(选项)
- 或
-l:登录式切换(如上所述)。 -c:只执行一条命令,然后立即返回到原用户,这在脚本中非常有用。# 以 root 身份执行 'apt update',然后立即退出 su - root -c "apt update"
-s:指定目标用户的Shell。# 以 oracle 用户身份,但使用 /bin/sh 而不是默认的 /bin/bash su - oracle -s /bin/sh
安全风险
su 的主要安全风险在于:一旦你切换到了 root,你就拥有了 root 的全部权限,如果你不小心运行了一个恶意脚本或命令,可能会对整个系统造成毁灭性破坏。root 的密码如果泄露,任何知道密码的人都能获得最高权限。
sudo 命令详解 (Superuser Do)
sudo 提供了一种更安全、更精细的权限控制方式。
为什么需要 sudo
sudo 的设计哲学是:root 的密码不应被共享,系统管理员通过配置文件(/etc/sudoers)来授权哪些用户可以以 root 身份执行哪些命令。
- 安全性:用户使用自己的密码来执行
sudo命令,而不是root的密码。 - 可追溯性:
sudo会记录详细的日志(/var/log/auth.log或/var/log/secure),记录了谁在什么时间执行了什么命令,便于审计。 - 最小权限原则:可以精确地授权用户执行特定的命令,而不是无限制的
root权限。
基本用法
# 以 root 身份执行命令 sudo command # 示例:安装一个软件包 sudo apt install vim # 切换到 root 用户(保持环境) sudo su # 切换到 root 用户(登录式环境,等同于 su -) sudo su -
执行过程:当你第一次使用 sudo 时,系统会提示你输入当前用户的密码,之后的一段时间内(默认通常是15分钟),再次使用 sudo 可能不需要再次输入密码。

sudo 的核心优势
- 不共享
root密码:root密码只由少数管理员掌握,普通用户无需知道。 - 精细授权:可以在
/etc/sudoers中配置,例如允许www-data用户只重启nginx服务,而不能做其他任何事情。 - 审计日志:所有
sudo操作都有据可查,安全性极高。
ps 命令详解 (Process Status)
ps 用于查看当前系统正在运行的进程。
为什么需要 ps
当你想了解系统在做什么时,ps 是你的第一选择,你可以看到:
- 有哪些进程在运行。
- 每个进程的 ID (PID)。
- 进程属于哪个用户。
- 进程占用了多少 CPU 和内存资源。
基本用法(查看当前用户进程)
在终端直接输入 ps,会显示当前终端会话中运行的进程。
ps
输出可能像这样:
PID TTY TIME CMD
12345 pts/0 00:00:00 bash
12389 pts/0 00:00:00 ps
PID: 进程IDTTY: 终端类型TIME: 已占用的 CPU 时间CMD: 命令名称
进程树(ps auxf)
ps 最强大的用法之一是结合多个选项来查看所有进程及其关系。
ps auxf
a: 显示所有终端下的所有进程,包括其他用户的进程。u: 以用户为中心的格式显示,包含用户名、CPU、内存等。x: 显示没有控制终端的进程(如系统服务)。f: 用 ASCII 字符树状结构显示进程的父子关系,非常直观。
示例输出(部分):
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19356 9400 ? Ss 5月30 0:07 /sbin/init
root 321 0.0 0.0 0 0 ? I< 5月30 0:00 [kthreadd]
...
root 567 0.0 0.1 10444 8756 ? Ss 5月30 0:00 /usr/sbin/sshd -D
root 1023 0.0 0.0 9860 3344 pts/0 Ss+ 10:15 0:00 \_ -bash
myuser 1234 0.0 0.0 12128 2892 pts/0 R+ 10:16 0:00 \_ ps auxf
从这个输出中,你可以清晰地看到 sshd 是 init 的子进程,而你的 bash 终端是 sshd 的子进程,ps 命令又是 bash 的子进程。
关键选项详解
-e: 显示所有进程,等同于-A。-l: 使用长格式显示,更多信息。-f: 完整格式显示,包括 PPID (父进程ID)。--forest: 和-f类似,但用更漂亮的树状图显示层级关系。
ps 与 su/sudo 的结合使用
这是 ps 命令最常见的高级应用场景。
查看当前用户的进程
这是最简单的场景,无需任何特殊权限。
# 查看当前用户的所有进程 ps u # 查看当前用户的进程树 ps u --forest
查看其他用户的进程(需要 sudo)
普通用户无法看到其他用户的进程详细信息(出于隐私和安全考虑),如果你需要查看 nginx 用户的进程,你需要 sudo。
# 错误示范(普通用户可能看不到) ps -u nginx # 正确示范(使用 sudo) sudo ps -u nginx
或者,使用 ps aux 并用 grep 过滤:
sudo ps aux | grep nginx
切换到 root 后查看所有进程
这种方法比较“暴力”,会切换到一个全新的 root 环境,然后查看所有进程。
# 1. 切换到 root 用户 sudo su - # 2. 查看所有进程及其树状关系 ps auxf # 3. 完成后,退出 root 环境 exit
注意:这种方法虽然直观,但不推荐,因为它会暴露整个 root 环境,增加了误操作的风险。sudo ps auxf 是更安全、更推荐的方式。
总结与最佳实践
| 特性 | su |
sudo |
|---|---|---|
| 核心目的 | 切换用户身份 | 以其他用户身份执行命令 |
| 密码使用 | 需要输入目标用户的密码 | 需要输入当前用户的密码 |
| 环境切换 | su - 提供新环境 |
不切换环境,仅在命令执行时提权 |
| 安全性 | 较低,共享 root 密码 |
高,不共享密码,有审计日志 |
| 可审计性 | 差 | 极佳,所有操作都有日志记录 |
| 推荐场景 | 脚本中需要完全切换到某个用户,或进行系统管理任务时 | 日常系统管理和绝大多数情况下的首选 |
最佳实践
- 优先使用
sudo:在绝大多数情况下,使用sudo command来执行需要管理员权限的命令,这是最安全、最现代的做法。 - 谨慎使用
su -:只有在需要长时间、多次以root身份工作,或者脚本逻辑复杂必须完全切换环境时,才使用su -。 - 善用
ps auxf:当你需要排查问题、监控系统负载时,ps auxf是你的好朋友,它能让你对进程关系一目了然。 - 结合
grep:当系统进程非常多时,使用ps aux | grep <keyword>来快速定位你关心的进程。 exit:使用su或sudo su切换后,任务完成后一定要记得用exit返回,避免长时间停留在高权限状态下。
掌握 su, sudo 和 ps 是迈向 Linux 高手的必经之路,希望这篇详细的教程能帮助你彻底理解它们!
