系统状态与进程管理¶
概述¶
系统状态监控和进程管理是 Linux 运维和安全分析的核心技能。本文介绍了系统信息查看、进程管理、内存和磁盘监控、定时任务配置等内容,是进行系统安全审计和入侵排查的基础。
查看系统信息¶
日期时间相关命令¶
| 命令 | 作用 | 示例 |
|---|---|---|
date |
显示或设置系统日期时间 | date、 date "+%Y-%m-%d %H:%M:%S" |
cal |
显示日历 | cal(当月)、cal 2026(全年) |
uptime |
显示系统运行时间、负载 | uptime |
w |
显示登录用户及其正在执行的命令 | w |
uptime输出解析:
-14:30:00:当前时间
- up 15 days, 3:25:系统已运行15天3小时25分钟
- 2 users:当前2个用户登录
- load average: 0.52, 0.58, 0.59:过去1分钟、5分钟、15分钟的平均负载
专业解读:负载平均值表示正在运行或等待CPU的进程数。对于单核CPU,1.0表示满载;对于4核CPU,4.0表示满载。长期超过CPU核心数说明系统压力大。
系统版本相关命令¶
进程管理¶
程序、进程、服务的区别¶
| 概念 | 英文 | 说明 |
|---|---|---|
| 程序 | Program | 存储在磁盘上的可执行文件(静态) |
| 进程 | Process | 程序运行起来的实例,有独立的内存空间(动态) |
| 服务 | Service | 后台持续运行的进程,通常随系统启动而启动 |
专业解读:一个程序可以同时运行多个进程(如打开多个Chrome窗口就是多个进程)。Linux中服务通常由systemd管理,配置文件在
/usr/lib/systemd/system/或/etc/systemd/system/。
运行程序的方式¶
| 方式 | 命令 | 特点 |
|---|---|---|
| 前台运行 | ./xxx |
占用当前终端,按Ctrl+C终止 |
| 后台运行 | nohup ./xxx & |
脱离终端,关闭SSH后仍继续运行 |
后台运行详解:
-&:将进程放到后台执行
- nohup:忽略SIGHUP信号(关闭终端时发送的信号)
- 输出默认重定向到 nohup.out 文件
专业解读:更现代的后台运行方式是使用
systemd服务或screen/tmux会话管理器。tmux可以在断开SSH后保持会话,稍后重新连接恢复。
查看进程:top¶
top 是实时的进程监控工具,类似Windows的任务管理器。
top界面关键信息: - 第一行:系统时间、运行时间、登录用户数、负载 - 第二行:进程总数、运行中/睡眠中/停止/僵尸进程数 - 第三行:CPU使用率(us用户态、sy系统态、ni nice、id空闲、wa等待IO) - 第四、五行:内存和Swap使用情况 - 下方:进程列表(PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND)
查看进程:ps¶
全称:process status
| 选项 | 作用 |
|---|---|
-a |
显示所有进程,包括其他用户的进程 |
-u |
选择有效的用户ID或用户名(显示详细信息) |
-x |
显示没有控制终端的进程(后台进程) |
-e |
显示所有进程(同 -A) |
-f |
显示更完整的信息(通常与 -e 一起用) |
常用组合:
ps输出字段说明:
| 字段 | 说明 |
|---|---|
| PID | 进程ID,唯一标识一个进程 |
| PPID | 父进程ID |
| USER/UID | 进程所属用户 |
| %CPU | CPU使用率 |
| %MEM | 内存使用率 |
| VSZ | 虚拟内存大小(KB) |
| RSS | 实际物理内存大小(KB) |
| TTY | 终端设备 |
| STAT | 进程状态(R运行、S睡眠、T停止、Z僵尸) |
| START | 启动时间 |
| TIME | 累计CPU时间 |
| COMMAND | 启动命令 |
进程树:pstree¶
pstree # 以树状图显示进程关系
pstree -p # 显示进程PID
pstree mysql # 查看mysql用户的进程树
pstree -p | grep ssh # 查找ssh相关进程
专业解读:pstree清晰展示了进程之间的父子关系,对于理解服务启动链和查找孤儿进程非常有用。
服务管理:systemctl¶
CentOS 7使用systemd作为初始化系统和服务管理器,systemctl 是主要管理命令。
| 命令 | 作用 |
|---|---|
systemctl status 服务名.service |
查看服务状态 |
systemctl start 服务名.service |
启动服务 |
systemctl restart 服务名.service |
重启服务 |
systemctl stop 服务名.service |
停止服务 |
systemctl enable 服务名.service |
设置开机自启 |
systemctl disable 服务名.service |
禁止开机自启 |
systemctl list-unit-files \| grep enabled |
查看所有开机自启的服务 |
systemctl 与 service 命令对比¶
CentOS 6及更早版本使用 service 命令,CentOS 7同时兼容,但推荐systemctl。
| 操作 | service(旧) | systemctl(新) |
|---|---|---|
| 启动服务 | service 服务 start |
systemctl start 服务 |
| 停止服务 | service 服务 stop |
systemctl stop 服务 |
| 重启服务 | service 服务 restart |
systemctl restart 服务 |
| 查看状态 | service 服务 status |
systemctl status 服务 |
停止程序:kill 信号量¶
Linux通过信号(Signal) 控制进程的行为。
| 信号值 | 名称 | 含义 | 说明 |
|---|---|---|---|
| 0 | EXIT | 程序退出 | 检测进程是否存在 |
| 1 | HUP | 挂起信号 | 挂断终端或重新加载配置(如 nginx -s reload 就是发送HUP) |
| 2 | INT | 中断信号 | Ctrl + C 发出的信号,请求终止 |
| 3 | QUIT | 退出信号 | 类似INT,但会生成core dump |
| 9 | KILL | 强制终止 | 无法被捕获或忽略,立即结束进程 |
| 11 | SEGV | 段错误 | 非法内存访问时由内核自动发送 |
| 15 | TERM | 正常终止 | kill命令的默认信号,请求进程优雅退出 |
kill PID # 发送TERM(15)信号,请求进程退出
kill -9 PID # 发送KILL(9)信号,强制终止(最后手段)
kill -1 PID # 发送HUP(1)信号,重载配置
killall nginx # 按名称终止所有nginx进程
pkill nginx # 按名称匹配终止进程
专业解读: - 优先使用
kill PID(默认15),给进程清理资源的机会 -kill -9是最后手段,进程没有机会保存数据或释放资源,可能导致数据丢失或文件损坏 - 如果kill -9都杀不掉,可能是进程处于D状态(不可中断睡眠,通常是等待IO),此时只能重启系统
内存使用情况¶
free 命令¶
free输出解析:
| 字段 | 说明 |
|---|---|
| total | 总内存/交换空间 |
| used | 已使用 |
| free | 完全未使用 |
| shared | 共享内存 |
| buff/cache | 缓冲区和缓存(可回收) |
| available | 可用于启动新应用的内存(不用交换) |
专业解读:Linux会将空闲内存用于缓存磁盘数据,因此
free字段通常很小,这是正常现象。判断内存是否充足应看 available 值。Swap是磁盘上划分的虚拟内存,速度远低于物理内存,频繁使用Swap说明内存不足。
磁盘使用情况¶
du 命令¶
全称:disk usage
du /usr # 显示/usr目录的总大小
du -h /usr # 以人类可读的方式显示(K/M/G)
du -h /root --max-depth=1 # 只显示一层子目录的大小
du -h --max-depth=1 | sort -hr # 按大小降序排列
du -ah /root | sort -hr | head -n 3 # 找出/root下最大的3个文件/目录
du -ah /root --exclude="*/.*" # 排除隐藏目录
du -kt 10M ./* # 找出当前目录下10M以上的文件
专业解读:
du计算的是目录实际占用的磁盘空间,与ls -l显示的文件大小可能不同(因为目录块大小、稀疏文件等原因)。sort -hr中的-h支持人类可读的大小排序。
df 命令¶
专业解读:
df看的是文件系统/分区的整体使用情况,du看的是目录或文件的使用情况。如果df显示磁盘满了但du找不到大文件,可能是已删除但仍被进程占用的文件(用lsof +L1查找)。
sar 命令(综合性能监控)¶
全称:system activity reporter
sar 是sysstat工具包中的综合性能监控工具,可查看CPU、内存、IO、网络等历史数据。
CPU相关指标:
| 指标 | 说明 |
|---|---|
%user |
用户模式下消耗的CPU时间比例 |
%nice |
通过nice调整优先级的进程消耗的CPU时间 |
%system |
内核模式下消耗的CPU时间比例 |
%iowait |
CPU等待磁盘I/O导致空闲的时间比例 |
%steal |
虚拟机中等待宿主机CPU的时间比例 |
%idle |
CPU完全空闲的时间比例 |
专业解读:
%iowait高通常意味着磁盘是瓶颈。在虚拟化环境中,%steal高说明宿主机资源紧张,正在"偷取"虚拟机的CPU时间。
定时任务¶
crontab¶
全称:cron table
cron是Linux下的定时任务守护进程,按照预设的时间表达式自动执行命令或脚本。
cron表达式格式:
常用示例:
* * * * * command # 每分钟执行
0 * * * * command # 每小时第0分钟执行
0 2 * * * command # 每天凌晨2点执行
0 2 * * 0 command # 每周日凌晨2点执行
0 2 1 * * command # 每月1日凌晨2点执行
*/5 * * * * command # 每5分钟执行
crontab命令:
| 命令 | 作用 |
|---|---|
crontab -l |
列出当前用户的定时任务 |
crontab -e |
编辑当前用户的定时任务 |
crontab -r |
删除当前用户的所有定时任务 |
crontab file.cron |
将文件中的任务导入 |
crontab -u root -l # 查看root用户的定时任务
crontab -u root -e # 编辑root用户的定时任务
crontab -u root -r # 删除root用户的所有定时任务
crontab -u root time.cron # 将time.cron文件导入root的定时任务
在线cron表达式生成工具:https://tool.lu/crontab
定时任务相关文件¶
| 文件/目录 | 作用 |
|---|---|
/etc/crontab |
系统级定时任务管理文件 |
/var/spool/cron/ |
每个用户(包括root)的crontab任务存储位置 |
/etc/cron.d/ |
存放要执行的crontab文件或脚本(由系统维护) |
/etc/cron.daily/ |
每天执行一次的脚本目录 |
/etc/cron.hourly/ |
每小时执行一次的脚本目录 |
/etc/cron.weekly/ |
每周执行一次的脚本目录 |
/etc/cron.monthly/ |
每月执行一次的脚本目录 |
专业解读: - 用户级crontab(
crontab -e)不需要指定执行用户 -/etc/crontab和/etc/cron.d/中的任务需要指定执行用户(格式多一列用户名) - 定时任务中的命令建议使用绝对路径,因为crontab的环境变量可能与登录shell不同 - crontab的执行结果默认发邮件给用户,如不需要可在行末加> /dev/null 2>&1
安全测试视角:进程隐藏与检测 攻击者可能使用多种技术隐藏恶意进程: - 进程名伪装:将恶意进程命名为常见系统进程(如
crond、sshd) - LD_PRELOAD 劫持:劫持readdir等函数,使ps、top等命令不显示特定进程 - 内核级 Rootkit:通过内核模块直接修改系统调用表,完全隐藏进程 - 检测方法:对比/proc目录与ps输出、使用unhide工具、检查内核模块(lsmod)安全测试视角:定时任务审计 定时任务(crontab)是攻击者维持权限的常见手段: - 检查所有用户的定时任务:
for user in $(cat /etc/passwd | cut -f1 -d:); do echo "=== $user ==="; crontab -u $user -l 2>/dev/null; done- 检查系统级定时任务目录:/etc/cron.d/、/etc/cron.daily/、/etc/cron.hourly/- 检查异常的定时任务文件权限和所有者 - 攻击者可能在/var/spool/cron/中植入反弹 shell 的定时任务# 查找所有定时任务 find /var/spool/cron /etc/cron.* -type f 2>/dev/null | xargs ls -la # 检查定时任务中是否包含可疑命令 grep -r -E "(wget|curl|nc |netcat|bash -i|/dev/tcp)" /etc/cron* /var/spool/cron 2>/dev/null安全测试视角:系统资源异常监控 系统资源异常可能是被攻击或植入挖矿程序的信号: - CPU 异常高:可能是加密货币挖矿程序(Miner) - 网络带宽异常:可能是 DDoS 攻击参与、数据外泄或 C2 通信 - 磁盘 IO 异常:可能是勒索软件加密文件 - 使用
sar、iotop、iftop、nethogs等工具持续监控可以及时发现异常