跳转至

系统状态与进程管理

概述

系统状态监控和进程管理是 Linux 运维和安全分析的核心技能。本文介绍了系统信息查看、进程管理、内存和磁盘监控、定时任务配置等内容,是进行系统安全审计和入侵排查的基础。

查看系统信息

日期时间相关命令

命令 作用 示例
date 显示或设置系统日期时间 datedate "+%Y-%m-%d %H:%M:%S"
cal 显示日历 cal(当月)、cal 2026(全年)
uptime 显示系统运行时间、负载 uptime
w 显示登录用户及其正在执行的命令 w

uptime输出解析

$ uptime
 14:30:00 up 15 days, 3:25, 2 users,  load average: 0.52, 0.58, 0.59
- 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核心数说明系统压力大。

系统版本相关命令

cat /etc/redhat-release        # 查看CentOS版本
uname -a                       # 显示内核版本、主机名、架构等所有信息
cat /proc/version              # 显示内核版本详细信息

进程管理

程序、进程、服务的区别

概念 英文 说明
程序 Program 存储在磁盘上的可执行文件(静态)
进程 Process 程序运行起来的实例,有独立的内存空间(动态)
服务 Service 后台持续运行的进程,通常随系统启动而启动

专业解读:一个程序可以同时运行多个进程(如打开多个Chrome窗口就是多个进程)。Linux中服务通常由systemd管理,配置文件在 /usr/lib/systemd/system//etc/systemd/system/

运行程序的方式

方式 命令 特点
前台运行 ./xxx 占用当前终端,按Ctrl+C终止
后台运行 nohup ./xxx & 脱离终端,关闭SSH后仍继续运行

后台运行详解

nohup ./start.sh &             # nohup = no hang up(不挂起)
- &:将进程放到后台执行 - nohup:忽略SIGHUP信号(关闭终端时发送的信号) - 输出默认重定向到 nohup.out 文件

专业解读:更现代的后台运行方式是使用 systemd 服务或 screen / tmux 会话管理器。tmux可以在断开SSH后保持会话,稍后重新连接恢复。

查看进程:top

top 是实时的进程监控工具,类似Windows的任务管理器。

top                            # 启动top监控
# 按 M 按内存排序
# 按 P 按CPU排序
# 按 q 退出

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 -ef                         # 显示所有进程的完整信息(System V风格)
ps aux                         # 显示所有进程的详细信息(BSD风格)
ps aux | grep nginx            # 查找nginx相关进程

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 status mysqld.service
systemctl start nginx.service
systemctl enable firewalld.service

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                           # 显示内存和Swap使用情况(KB)
free -h                        # 以人类可读的方式显示(自动选择KB/MB/GB)
free -m                        # 以MB为单位显示

free输出解析

              total        used        free      shared  buff/cache   available
Mem:           7822        2341         456         123        5024        5123
Swap:          2047           0        2047

字段 说明
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 -h                          # 显示所有文件系统的磁盘使用情况

专业解读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完全空闲的时间比例
yum install sysstat            # 安装sar
sar -u 1 5                     # 每1秒采样一次,共采样5次
sar -r                         # 查看内存使用情况
sar -d                         # 查看磁盘IO情况

专业解读%iowait 高通常意味着磁盘是瓶颈。在虚拟化环境中,%steal 高说明宿主机资源紧张,正在"偷取"虚拟机的CPU时间。


定时任务

crontab

全称:cron table

cron是Linux下的定时任务守护进程,按照预设的时间表达式自动执行命令或脚本。

cron表达式格式

分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-7,0和7都是周日)  命令

常用示例

* * * * * 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


安全测试视角:进程隐藏与检测 攻击者可能使用多种技术隐藏恶意进程: - 进程名伪装:将恶意进程命名为常见系统进程(如 crondsshd) - LD_PRELOAD 劫持:劫持 readdir 等函数,使 pstop 等命令不显示特定进程 - 内核级 Rootkit:通过内核模块直接修改系统调用表,完全隐藏进程 - 检测方法:对比 /proc 目录与 ps 输出、使用 unhide 工具、检查内核模块(lsmod

# 查找隐藏进程
unhide proc
unhide sys

# 检查可疑内核模块
lsmod | grep -i " suspicious\|unknown"

安全测试视角:定时任务审计 定时任务(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 异常:可能是勒索软件加密文件 - 使用 sariotopiftopnethogs 等工具持续监控可以及时发现异常