下面 30 个组合,按 “系统监控、日志分析、文件管理、进程管理、网络排查、权限审计”6 大高频场景分类,每个组合都来自真实运维场景,附带具体操作案例,新手也能直接复制使用。
一、系统监控与资源排查类(6 个):快速定位资源瓶颈
日常运维中,“系统负载高”“磁盘满”“内存不够用” 是最常见的告警,这 6 个组合能帮你 1 分钟找到问题根源。
1. 组合:top -b -n 1 | grep Cpu | awk '{print "CPU使用率:"$2"%"}' && free -h | grep Mem | awk '{print "内存使用率:"$3"/"$2"("$7"空闲)"}' && df -h | grep /$ | awk '{print "根分区使用率:"$5"("$4"空闲)"}'
场景说明
刚登录服务器,想快速看 CPU、内存、根分区的核心状态,不用分别输 top、free、df 三个命令。
命令解析
实战案例
\[root@web01 \~]# top -b -n 1 | grep Cpu | awk '{print "CPU使用率:"\$2"%"}' && free -h | grep Mem | awk '{print "内存使用率:"\$3"/"\$2"("\$7"空闲)"}' && df -h | grep /\$ | awk '{print "根分区使用率:"\$5"("\$4"空闲)"}'
CPU使用率:12.3%
内存使用率:1.2Gi/7.7Gi(6.3Gi空闲)
根分区使用率:45%(50G空闲)
注意事项
2. 组合:ps -eo pid,ppid,%cpu,%mem,cmd --sort=-%cpu | head -10
场景说明
系统 CPU 使用率突然飙升到 80% 以上,要快速找出 “吃 CPU 最多的前 10 个进程”,看是不是异常进程(如挖矿程序)。
命令解析
实战案例
\[root@web01 \~]# ps -eo pid,ppid,%cpu,%mem,cmd --sort=-%cpu | head -10
PID PPID %CPU %MEM CMD
12345 1 35.2 8.5 /usr/bin/java -jar app.jar # 发现Java进程占CPU最高
12367 12345 12.1 2.3 /usr/bin/python3 monitor.py
...
注意事项
3. 组合:find / -type f -size +100M 2>/dev/null | xargs du -sh | sort -hr
场景说明
收到 “根分区使用率 90%” 的告警,要快速找到 “大于 100M 的大文件”,看是不是日志没切割或临时文件没清理。
命令解析
实战案例
\[root@web01 \~]# find / -type f -size +100M 2>/dev/null | xargs du -sh | sort -hr
5.2G /var/log/nginx/access.log # 发现Nginx访问日志没切割,占5.2G
800M /tmp/large\_file.tar.gz
...
注意事项
4. 组合:vmstat 1 5 | awk 'NR>1 {print "平均等待IO时间:"$16"ms 等待IO进程数:"$17"个"}'
场景说明
系统响应变慢,但 CPU、内存使用率都不高,怀疑是 “磁盘 IO 瓶颈”,要查看 IO 等待情况。
命令解析
实战案例
\[root@web01 \~]# vmstat 1 5 | awk 'NR>1 {print "平均等待IO时间:"\$16"ms 等待IO进程数:"\$17"个"}'
平均等待IO时间:2ms 等待IO进程数:0个
平均等待IO时间:3ms 等待IO进程数:0个
... # 若wa持续超过10ms,说明IO有瓶颈
注意事项
5. 组合:sar -n DEV 1 3 | grep -v Average | awk '/eth0/ {print "网卡eth0:接收"$5"KB/s 发送"$6"KB/s"}'
场景说明
服务器带宽跑满,要查看 “指定网卡(如 eth0)的实时流量”,判断是接收还是发送流量过高。
命令解析
实战案例
\[root@web01 \~]# sar -n DEV 1 3 | grep -v Average | awk '/eth0/ {print "网卡eth0:接收"\$5"KB/s 发送"\$6"KB/s"}'
网卡eth0:接收1200KB/s 发送300KB/s
网卡eth0:接收1350KB/s 发送280KB/s
... # 若接收流量持续超过10000KB/s(约100Mbps),可能是被攻击
注意事项
6. 组合:w | awk 'NR>1 {print "登录用户:"$1" 登录IP:"$3" 登录时间:"$4}'
场景说明
怀疑服务器有非法登录,要查看 “当前在线的用户”,包括用户名、登录 IP 和时间,判断是否有异常账号。
命令解析
实战案例
\[root@web01 \~]# w | awk 'NR>1 {print "登录用户:"\$1" 登录IP:"\$3" 登录时间:"\$4}'
登录用户:root 登录IP:192.168.1.100 登录时间:10:23
登录用户:admin 登录IP:10.0.0.5 登录时间:11:05 # 若IP不在信任列表,需排查
注意事项
二、日志分析与数据提取类(6 个):从海量日志中抓关键信息
运维中 80% 的问题排查要靠日志,但日志动辄几百 MB,靠 “逐行看” 根本不现实,这 6 个组合能帮你快速提取有用数据。
7. 组合:grep -i "error" /var/log/nginx/error.log | grep -E "2025-09-08" | wc -l
场景说明
Nginx 服务报 500 错误,要统计 “9 月 8 日当天的 error 日志条数”,判断错误是偶尔出现还是持续爆发。
命令解析
实战案例
\[root@web01 \~]# grep -i "error" /var/log/nginx/error.log | grep -E "2025-09-08" | wc -l
128 # 9月8日共128条错误日志,需进一步看具体错误
注意事项
8. 组合:grep "500" /var/log/nginx/access.log | awk '{print $1,$7,$9}' | sort | uniq -c | sort -nr | head -10
场景说明
监控显示 “Nginx 500 错误率上升”,要找出 “出现 500 错误最多的前 10 个 IP 和 URL”,判断是单个 IP 异常访问还是特定接口有问题。
命令解析
实战案例
\[root@web01 \~]# grep "500" /var/log/nginx/access.log | awk '{print \$1,\$7,\$9}' | sort | uniq -c | sort -nr | head -10
23 192.168.1.200 /api/pay 500 # 该IP访问支付接口500错误23次
18 10.0.0.8 /api/order 500
...
注意事项
9. 组合:tail -f /var/log/messages | grep --line-buffered "ssh" | awk '/Accepted/ {print "正常登录:"$0} /Failed/ {print "登录失败:"$0}'
场景说明
想 “实时监控 SSH 登录情况”,一旦有成功登录或失败尝试,立即在终端显示,方便及时发现暴力破解。
命令解析
实战案例
\[root@web01 \~]# tail -f /var/log/messages | grep --line-buffered "ssh" | awk '/Accepted/ {print "正常登录:"\$0} /Failed/ {print "登录失败:"\$0}'
正常登录:Sep 8 14:30:01 web01 sshd\[12345]: Accepted password for root from 192.168.1.100 port 5678 ssh2
登录失败:Sep 8 14:32:05 web01 sshd\[12367]: Failed password for root from 203.0.113.5 port 1234 ssh2 # 陌生IP尝试登录,需拦截
注意事项
10. 组合:sed -n '/2025-09-08 14:00:00/,/2025-09-08 14:30:00/p' /var/log/tomcat/catalina.out | grep "Exception"
场景说明
开发反馈 “9 月 8 日 14:00-14:30 之间 Tomcat 报异常”,要提取 “这个时间段内的所有 Exception 日志”,快速定位代码问题。
命令解析
实战案例
\[root@web01 \~]# sed -n '/2025-09-08 14:00:00/,/2025-09-08 14:30:00/p' /var/log/tomcat/catalina.out | grep "Exception"
2025-09-08 14:15:23 ERROR \[http-nio-8080-exec-5] com.xxx.service.UserService: NullPointer Exception at line 123 # 找到空指针异常
注意事项
11. 组合:awk -F '|' '{print $3}' /var/log/app/log.txt | sort | uniq -c | sort -nr | head -5
场景说明
应用日志用 “|” 分隔字段(如 “时间 | 用户 ID | 接口名 | 耗时”),要统计 “调用次数最多的前 5 个接口”,分析业务热点。
命令解析
实战案例
\[root@web01 \~]# awk -F '|' '{print \$3}' /var/log/app/log.txt | sort | uniq -c | sort -nr | head -5
1256 /api/user/login # 登录接口调用最多,符合业务预期
890 /api/user/info
678 /api/order/list
...
注意事项
12. 组合:zgrep "timeout" /var/log/nginx/access.log-20250907.gz | wc -l
场景说明
要分析 “昨天压缩后的 Nginx 日志”(后缀.gz)中 “timeout 错误的次数”,不用先解压再 grep(节省磁盘空间)。
命令解析
实战案例
\[root@web01 \~]# zgrep "timeout" /var/log/nginx/access.log-20250907.gz | wc -l
45 # 昨天共45次timeout错误
注意事项
三、文件管理与批量操作类(6 个):告别重复手动操作
运维中常遇到 “批量改文件名”“批量替换文件内容”“批量传输文件” 等需求,手动做 10 个文件还好,100 个就崩溃了,这 6 个组合能帮你自动化处理。
13. 组合:find /data/backup -name "*.tar.gz" -mtime +7 -exec rm -f {} \;
场景说明
/data/backup 目录下有每天的备份文件(如 backup_20250901.tar.gz),要 “删除 7 天前的旧备份”,避免占满磁盘。
命令解析
实战案例
\[root@web01 \~]# find /data/backup -name "\*.tar.gz" -mtime +7 -exec rm -f {} \\;
\# 执行后,7天前的.tar.gz文件被删除,可通过ls确认
\[root@web01 \~]# ls /data/backup
backup\_20250902.tar.gz backup\_20250908.tar.gz # 只剩7天内的文件
注意事项
14. 组合:for file in /data/logs/*.log; do mv "$file" "$file.$(date +%Y%m%d)"; done
场景说明
每天凌晨要 “给 /data/logs 目录下的所有.log 文件加日期后缀”(如 access.log→access.log.20250908),方便后续归档。
命令解析
实战案例
\[root@web01 \~]# ls /data/logs
access.log error.log
\[root@web01 \~]# for file in /data/logs/\*.log; do mv "\$file" "\$file.\$(date +%Y%m%d)"; done
\[root@web01 \~]# ls /data/logs
access.log.20250908 error.log.20250908
注意事项
15. 组合:sed -i 's/old_ip=192.168.1.10/old_ip=192.168.1.20/g' /etc/config/*.conf
场景说明
要 “批量修改 /etc/config 目录下所有.conf 文件中的 IP”(把 192.168.1.10 改成 192.168.1.20),不用逐个打开文件编辑。
命令解析
实战案例
\[root@web01 \~]# grep "old\_ip" /etc/config/app.conf
old\_ip=192.168.1.10
\[root@web01 \~]# sed -i 's/old\_ip=192.168.1.10/old\_ip=192.168.1.20/g' /etc/config/\*.conf
\[root@web01 \~]# grep "old\_ip" /etc/config/app.conf
old\_ip=192.168.1.20 # 已成功替换
注意事项
16. 组合:tar -zcvf /data/backup/app_$(date +%Y%m%d).tar.gz /data/app --exclude=/data/app/logs
场景说明
备份 /data/app 目录时,要 “排除 logs 子目录”(日志占空间且无需备份),并给备份包加日期后缀,方便识别。
命令解析
实战案例
\[root@web01 \~]# tar -zcvf /data/backup/app\_20250908.tar.gz /data/app --exclude=/data/app/logs
/data/app/
/data/app/config/
/data/app/bin/ # 未包含logs目录
...
\[root@web01 \~]# ls /data/backup
app\_20250908.tar.gz
注意事项
17. 组合:scp -r /data/backup/*.tar.gz root@192.168.1.200:/data/remote_backup/
场景说明
要 “把本地 /data/backup 目录下的所有.tar.gz 备份包,批量传输到远程服务器 192.168.1.200 的 /data/remote_backup 目录”,实现异地备份。
命令解析
实战案例
\[root@web01 \~]# scp -r /data/backup/\*.tar.gz root@192.168.1.200:/data/remote\_backup/
root@192.168.1.200's password: # 输入远程服务器密码
app\_20250908.tar.gz 100% 500MB 100MB/s 00:05 # 传输完成
注意事项
18. 组合:awk 'NR==FNR{a[$1];next} !($2 in a)' /data/blacklist.txt /data/user.txt
场景说明
/data/blacklist.txt 是 “黑名单 IP 列表”(每行一个 IP),/data/user.txt 是 “用户访问记录”(格式 “时间 IP 用户名”),要 “提取不在黑名单中的用户记录”,过滤异常 IP。
命令解析
实战案例
\[root@web01 \~]# cat /data/blacklist.txt
192.168.1.200
\[root@web01 \~]# cat /data/user.txt
2025-09-08 192.168.1.100 user1
2025-09-08 192.168.1.200 user2 # 黑名单IP
2025-09-08 10.0.0.5 user3
\[root@web01 \~]# awk 'NR==FNR{a\[\$1];next} !(\$2 in a)' /data/blacklist.txt /data/user.txt
2025-09-08 192.168.1.100 user1 # 过滤掉了黑名单IP的记录
2025-09-08 10.0.0.5 user3
注意事项
四、进程与服务管理类(4 个):快速管控服务状态
运维中 “启动 / 停止服务”“查看服务日志”“重启异常进程” 是日常操作,这 4 个组合能帮你更高效地管理进程和服务。
19. 组合:systemctl status nginx | grep -E "active|inactive|failed" && journalctl -u nginx --since "10 minutes ago" | tail -20
场景说明
要 “快速查看 Nginx 服务状态”(是运行中、停止还是失败),并看 “最近 10 分钟的服务日志”,判断服务是否正常。
命令解析
实战案例
\[root@web01 \~]# systemctl status nginx | grep -E "active|inactive|failed"
Active: active (running) since Sun 2025-09-08 10:00:00 CST; 4h ago # 服务正常运行
\[root@web01 \~]# journalctl -u nginx --since "10 minutes ago" | tail -20
Sep 08 14:20:01 web01 nginx\[1234]: 192.168.1.100 - - \[08/Sep/2025:14:20:01 +0800] "GET / HTTP/1.1" 200 1234 "-" "Chrome/116.0.0.0"
... # 最近10分钟日志无异常
注意事项
20. 组合:ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9
场景说明
Java 进程异常卡死(用jps看不到进程,但ps能看到),要 “强制杀死所有 Java 进程”,之后重启服务。
命令解析
实战案例
\[root@web01 \~]# ps -ef | grep java | grep -v grep
root 12345 1 0 10:00 ? 00:01:23 /usr/bin/java -jar app.jar
\[root@web01 \~]# ps -ef | grep java | grep -v grep | awk '{print \$2}' | xargs kill -9
\[root@web01 \~]# ps -ef | grep java | grep -v grep # 已无Java进程
注意事项
21. 组合:nohup /data/app/start.sh > /data/logs/app.log 2>&1 &
场景说明
要 “后台启动 /data/app/start.sh 脚本”,并把输出日志写到 /data/logs/app.log,且退出终端后进程不停止(避免终端关闭导致进程退出)。
命令解析
实战案例
\[root@web01 \~]# nohup /data/app/start.sh > /data/logs/app.log 2>&1 &
\[1] 12345 # 后台进程ID
\[root@web01 \~]# tail -f /data/logs/app.log # 查看启动日志
2025-09-08 14:30:00 应用启动中...
2025-09-08 14:30:05 应用启动成功!
注意事项
22. 组合:pgrep -f "app.jar" || /data/app/start.sh
场景说明
写定时任务(crontab)时,要 “检查 app.jar 进程是否存在,不存在则启动”,实现服务的简单保活(避免服务意外退出后无人处理)。
命令解析
实战案例
\# 先手动停止app.jar进程
\[root@web01 \~]# pgrep -f "app.jar" # 无输出,进程不存在
\[root@web01 \~]# pgrep -f "app.jar" || /data/app/start.sh
2025-09-08 14:35:00 应用启动中...
2025-09-08 14:35:05 应用启动成功! # 进程不存在,执行启动
\# 再次检查
\[root@web01 \~]# pgrep -f "app.jar"
12345 # 进程已存在,不执行启动
注意事项
五、网络连接与故障排查类(4 个):快速定位网络问题
运维中 “服务连不上”“访问超时”“端口不通” 是常见网络问题,这 4 个组合能帮你快速排查是服务器、端口还是网络链路的问题。
23. 组合:netstat -tulnp | grep :8080
场景说明
Tomcat 服务启动后,要 “检查 8080 端口是否被监听”,判断服务是否真的启动成功(避免服务启动报错但没察觉)。
命令解析
实战案例
\[root@web01 \~]# netstat -tulnp | grep :8080
tcp6 0 0 :::8080 :::\* LISTEN 12345/java # 8080端口被Java进程(Tomcat)监听,启动成功
注意事项
24. 组合:telnet 192.168.1.200 3306 || echo "MySQL端口不通"
场景说明
Web 服务器连不上 MySQL 服务器(192.168.1.200:3306),要 “测试 MySQL 端口是否能通”,判断是 MySQL 服务没启动还是防火墙拦截。
命令解析
实战案例
\# 端口通的情况
\[root@web01 \~]# telnet 192.168.1.200 3306
Trying 192.168.1.200...
Connected to 192.168.1.200. # 连接成功,端口通
Escape character is '^]'.
\# 端口不通的情况
\[root@web01 \~]# telnet 192.168.1.200 3306 || echo "MySQL端口不通"
Trying 192.168.1.200...
telnet: connect to address 192.168.1.200: Connection refused
MySQL端口不通 # 输出提示
注意事项
25. 组合:traceroute 10.0.0.1 | grep -E "^\s*[0-9]+" | awk '{print "跳数:"$1" IP:"$2" 延迟:"$3}'
场景说明
服务器访问 10.0.0.1(总部网关)超时,要 “跟踪网络链路”,看是哪一跳(路由器)出了问题,延迟过高还是丢包。
命令解析
实战案例
\[root@web01 \~]# traceroute 10.0.0.1 | grep -E "^\s\*\[0-9]+" | awk '{print "跳数:"\$1" IP:"\$2" 延迟:"\$3}'
跳数:1 IP:192.168.1.1 延迟:1.243ms
跳数:2 IP:10.0.0.1 延迟:5.678ms # 两跳到达,无延迟过高
\# 若某跳显示“\* \* \*”,说明该节点丢包,需排查对应路由器
注意事项
26. 组合:ss -antp | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -10
场景说明
Nginx 服务(80 端口)的连接数突然飙升,要 “找出连接 80 端口最多的前 10 个 IP”,判断是否有 IP 在恶意发起大量连接(如 CC 攻击)。
命令解析
实战案例
\[root@web01 \~]# ss -antp | grep :80 | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -10
120 192.168.1.200 # 该IP有120个连接,若远超其他IP,可能是恶意访问
30 10.0.0.5
25 203.0.113.8
...
注意事项
六、权限与安全审计类(4 个):保障服务器安全
运维中 “权限配置错误导致服务起不来”“误删文件”“非法修改配置” 是常见安全问题,这 4 个组合能帮你审计权限和操作记录。
27. 组合:find /data/app -perm 777 -type f 2>/dev/null
场景说明
服务器被扫描出 “有文件权限为 777(所有人可读写执行)”,要 “找出 /data/app 目录下所有权限为 777 的文件”,修改为安全权限(如 644)。
命令解析
实战案例
\[root@web01 \~]# find /data/app -perm 777 -type f 2>/dev/null
/data/app/config/db.conf # 发现配置文件权限为777,有安全风险
\[root@web01 \~]# chmod 644 /data/app/config/db.conf # 修改为安全权限( owner读写,其他读)
注意事项
28. 组合:getfacl /data/app | grep -E "user:|group:"
场景说明
用ls -l看 /data/app 目录权限是drwxr-xr-x,但某个用户还是没权限访问,要 “查看该目录的 ACL(访问控制列表)权限”,判断是否有特殊权限配置。
命令解析
实战案例
\[root@web01 \~]# getfacl /data/app | grep -E "user:|group:"
user::rwx # 所有者权限
user:admin:r-x # admin用户有读执行权限
group::r-x # 所属组权限
group:dev:--- # dev组无权限(可能是问题原因)
注意事项
29. 组合:lastlog | grep -v "Never logged in"
场景说明
要 “查看所有用户的最后登录时间”,判断是否有长期不用的账号被非法登录(比如 root 账号 3 个月没登录,突然有登录记录)。
命令解析
实战案例
\[root@web01 \~]# lastlog | grep -v "Never logged in"
Username Port From Latest
root pts/0 192.168.1.100 Sun Sep 8 10:00:00 +0800 2025
admin pts/1 10.0.0.5 Sun Sep 8 11:05:00 +0800 2025
注意事项
30. 组合:grep -E "rm -rf|chmod|chown" /root/.bash_history | tail -20
场景说明
服务器上的文件突然丢失,要 “查看 root 用户最近执行的 20 条含 rm -rf、chmod、chown 的命令”,判断是否有人误操作删除文件或修改权限。
命令解析
实战案例
\[root@web01 \~]# grep -E "rm -rf|chmod|chown" /root/.bash\_history | tail -20
rm -rf /data/tmp/\* # 正常清理临时文件
chmod 644 /data/app/config.conf
rm -rf /data/app/logs/old.log # 无异常删除
注意事项
命令组合的核心原则
1. 按需组合:不要死记硬背,比如 “找大文件” 就想到find+du+sort,“分析日志” 就想到grep+awk+sort,按场景记组合逻辑;
2. 先测后用:批量删除、修改文件前,先用ls或cat预览结果(比如把rm -f改成ls -l),避免误操作;
3. 善用管道:|是命令组合的核心,把前一个命令的输出作为后一个命令的输入,比如 “找文件→算大小→排序” 就是典型的管道组合;
4. 记关键参数:不用记所有参数,比如find记-name(按名找)、-size(按大小)、-mtime(按时间),awk记-F(分隔符)、$n(字段),够用就行。
这些组合不是 “万能公式”,但能覆盖你 90% 以上的日常运维需求。遇到新场景时,试着用 “基础命令 + 管道 + 过滤” 的思路组合,慢慢就能形成自己的运维命令库。
作者丨数安智信
来源丨公众号:运维网工(ID:gh_b3b43949212c)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
如果字段的最大可能长度超过255字节,那么长度值可能…
只能说作者太用心了,优秀
感谢详解
一般干个7-8年(即30岁左右),能做到年入40w-50w;有…
230721