Linux命令专栏第 9 期:系统监控无忧!资源查看与诊断的15+个必备命令
2025-12-26 11:15·Linux技术派
第 9 期:掌控系统脉搏!实时监控与资源诊断的高效命令集
标题吸睛点
“系统健康一目了然!15+个Linux监控命令助你提前发现90%的性能瓶颈与安全隐患”
核心内容
1. 用户活动监控
◦ who 基础用户查看
who – 显示当前登录用户、终端、登录时间和来源IP(系统安全第一道防线)
who -a – 显示所有可用信息(包括系统启动时间、失效进程等)
who -b – 仅显示系统最后启动时间(判断系统运行时长)
◦ w 详细活动监控
w – 显示登录用户及其正在执行的命令(比who更详细,包含CPU/内存使用)
w -s – 简洁模式输出(省略登录时间、JCPU、PCPU信息)
w -f liuyazhuang – 仅显示特定用户的活动(监控特定账户行为)
2. 系统诊断信息
◦ dmesg 内核日志
dmesg – 显示内核环形缓冲区消息(系统启动、硬件变化的关键信息)
dmesg -T – 以人类可读时间格式显示(-T参数,替代时间戳为实际时间)
dmesg | grep -i memory – 过滤内存相关信息(诊断内存问题)
dmesg -w – 实时监控内核消息(-w参数,类似tail -f,检测硬件热插拔)
3. 磁盘空间监控
◦ df 分区使用情况
df -h – 人类可读格式显示磁盘空间(-h参数,GB/MB取代字节)
df -i – 显示inode使用情况(排查”磁盘空间充足但无法创建文件”问题)
df -t ext4 – 仅显示ext4文件系统(-t指定类型,过滤特定文件系统)
df -l – 仅显示本地文件系统(排除NFS、CIFS等网络文件系统)
◦ du 目录空间分析
du -sh /home – 显示/home目录总大小(-s汇总,-h人类可读)
du -h –max-depth=1 /var – 仅分析/var下一级子目录(–max-depth控制深度)
du -a /etc | sort -n -r | head -n 10 – 找出/etc下最大的10个文件(结合sort排序)
du –exclude=”*.cache” /home – 排除特定文件类型(减少干扰信息)
4. 内存使用监控
◦ free 内存详情
free -h – 人类可读格式显示内存使用(-h参数,自动选择GB/MB/KB单位)
free -m – 以MB为单位显示(-m参数,固定单位便于脚本处理)
free -t – 显示总计行(-t参数,提供RAM+Swap总和)
free -s 2 – 每2秒刷新一次(-s参数,动态监控内存变化)
free -w – 显示可用内存列(-w参数,更准确的可用内存计算)
实战小贴士:12个高频实用案例
1. 服务器安全审计
# 检测可疑登录
w | awk 'NR>2 {if ($3 != ":0" && $3 != "pts/0") print $0}'
筛选非本地终端(非:0)且非第一个伪终端(pts/0)的登录,发现可能的未授权访问
2. 系统启动问题诊断
# 快速查看启动错误
dmesg -T | grep -i -E "error|fail|warn|unable"
过滤内核日志中的关键错误信息,加速故障排查(系统无法启动时通过救援模式运行)
3. 磁盘空间紧急处理
# 快速定位大目录
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk 'NR==1; $5 >= 85 {print}'
找出使用率超过85%的分区,优先处理空间危机(配合du进一步分析)
4. 日志目录空间优化
# 分析/var/log空间使用
du -h --max-depth=1 /var/log | sort -h
journalctl --vacuum-time=3d # 清理systemd日志
find /var/log -name "*.gz" -mtime +30 -delete # 删除30天前压缩日志
组合命令诊断并清理日志空间(自动化脚本核心逻辑)
5. 内存泄漏监控
# 持续监控内存变化
watch -n 5 'free -h && echo "=== Top Memory Processes ===" && ps aux --sort=-%mem | head -6'
每5秒刷新内存状态及占用最高的进程(-n指定间隔,发现内存泄漏源头)
6. 容器环境资源分析
# Docker环境磁盘使用
docker system df
du -sh /var/lib/docker/containers/*/
结合原生命令与Linux命令,全面分析容器磁盘占用(Docker环境维护必备)
7. 文件系统inode耗尽处理
# 诊断inode耗尽问题
df -i
find /home -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
当”磁盘空间充足但无法创建文件”时,快速定位大量小文件目录(邮件服务器常见问题)
8. 无人值守监控脚本
#!/bin/bash
# 资源监控告警脚本
THRESHOLD=90
while true; do
df -h | awk -v t=$THRESHOLD '$5+0 > t {print "WARNING: " $0}' | mail -s "Disk Alert" admin@example.com
free | awk 'NR==2 {if ($3/$2*100 > 95) print "Memory critical!" | "mail -s "Memory Alert" admin@example.com"}'
sleep 300
done
自动监控磁盘和内存,超过阈值邮件告警(部署在/etc/rc.local实现开机自启)
9. 系统升级前资源评估
# 升级前资源检查
echo "=== 磁盘空间 ==="; df -h /
echo "=== 内存状态 ==="; free -h
echo "=== 活动用户 ==="; who
echo "=== 内核版本 ==="; uname -r
dmesg -T | tail -20 > pre_upgrade_dmesg.log
全面收集系统状态,为安全升级提供基准(避免升级过程中资源不足导致失败)
10. 服务器性能基线建立
# 创建性能基线
baseline_dir="/var/log/performance_baseline"
mkdir -p $baseline_dir
dmesg > $baseline_dir/dmesg_$(date +%Y%m%d).log
df -h > $baseline_dir/df_$(date +%Y%m%d).log
du -sh /var/log /home /tmp > $baseline_dir/du_$(date +%Y%m%d).log
free -h > $baseline_dir/free_$(date +%Y%m%d).log
定期记录系统资源状态,建立性能基线用于异常检测(运维自动化基础)
11. 云服务器成本优化
# 识别资源浪费
echo "未充分利用的CPU核心:"; nproc
echo "过度配置的内存:"; free -h
echo "未使用的磁盘空间:"
df -h | awk '$5+0 < 20 && $4+0 > 10 {print $0}'
分析云服务器资源利用率,优化实例规格节省成本(企业级云成本管理)
12. 系统故障后取证
# 故障现场快照
mkdir /root/incident_$(date +%Y%m%d_%H%M%S)
dmesg -T > /root/incident_*/dmesg.log
who > /root/incident_*/who.log
df -h > /root/incident_*/df.log
ps aux > /root/incident_*/ps.log
netstat -tulpn > /root/incident_*/netstat.log
journalctl -S "1 hour ago" > /root/incident_*/recent_logs.log
系统崩溃或异常时,快速保存关键证据(安全事件响应标准流程)
高级技巧:监控效率倍增器
实时监控组合技:
watch -n 1 'echo “=== USERS ===”; w; echo “=== DISK ===”; df -h /; echo “=== MEMORY ===”; free -h'
单命令仪表盘式监控(-n 1每秒刷新,关键指标一屏尽览)
日志关联分析:
journalctl _PID=$(pgrep -f “nginx”) –since “2023-12-25 08:00:00” | grep -i error
结合进程ID和时间范围准确定位问题(替代盲目grep日志文件)
资源使用趋势:
vmstat 5 12 | tee /tmp/vmstat_$(date +%s).log
每5秒采集系统资源,共12次(1分钟),同时显示和保存到文件(性能问题趋势分析)
智能告警阈值:
# 动态阈值脚本
current_load=$(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1)
cores=$(nproc)
threshold=$(echo "$cores * 1.5" | bc)
if (( $(echo "$current_load > $threshold" | bc -l) )); then
echo "High load: $current_load (threshold: $threshold)" | mail -s "LOAD ALERT" admin
fi
根据CPU核心数动态计算负载阈值(避免固定阈值在不同规格服务器上的误报)
掌握这些系统监控命令,你将能够像经验丰富的系统管理员一样,实时掌握服务器健康状态,提前发现潜在问题。从简单的who到复杂的资源分析组合技,这些命令构成了Linux运维的”听诊器”,让你在问题爆发前就能感知系统异常。
下期我们将深入探讨Linux进程管理与性能调优命令,助你精准控制每个进程的资源使用,最大化系统性能!





