题目3:磁盘空间监控与告警
描述:分析df命令输出,对使用率超过80%的分区发出告警。
测试数据(保存为 df_output.txt):
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 20480000 5120000 15360000 25% /
/dev/sda2 51200000 45056000 6144000 88% /home
/dev/sda3 30720000 15360000 15360000 50% /var
/dev/sdb1 10240000 9216000 1024000 90% /data
tmpfs 2048000 51200 1996800 3% /run
/dev/sdc1 40960000 32768000 8192000 80% /backup
#!/bin/bash
#磁盘监控脚本
echo "===磁盘空间监控报告==="
awk 'NR>1 {
if ($5+0>80){
print "⚠️ 告警:"$6"分区使用率"$5"(阈值%80)"
if ($5+0>90){
print "🚨 严重: 使用率超过90%,请立即处理!"
}
}
}' df_output.txt
#统计信息
echo -e "\n===统计信息==="
awk 'NR>1 {
total++
if ($5+0>80) waring++
if ($5+0>80) critical++
}
END {
print "总分区数:"total
print "警告分区:"(waring+0)
print "严重分区:"(critical+0)
}' df_output.txt
题目4:网络连接状态分析
描述:分析 netstat 输出,统计各种网络连接状态并识别异常连接。
测试数据(保存为 netstat_output.txt):
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 192.168.1.100:22 192.168.1.1:54321 ESTABLISHED
tcp 0 0 192.168.1.100:80 10.0.0.1:45678 ESTABLISHED
tcp 0 0 192.168.1.100:443 172.16.1.100:34567 ESTABLISHED
tcp 0 0 192.168.1.100:22 192.168.1.2:54322 ESTABLISHED
tcp 0 0 192.168.1.100:8080 10.0.0.2:23456 TIME_WAIT
tcp 0 0 192.168.1.100:3306 192.168.1.50:12345 ESTABLISHED
tcp 0 0 192.168.1.100:22 192.168.1.3:54323 ESTABLISHED
tcp 0 0 192.168.1.100:80 10.0.0.3:34567 TIME_WAIT
tcp 0 0 192.168.1.100:443 172.16.1.101:45678 ESTABLISHED
tcp 0 0 192.168.1.100:22 192.168.1.4:54324 ESTABLISHED
tcp 0 0 192.168.1.100:8080 10.0.0.4:12345 SYN_SENT
tcp 0 0 192.168.1.100:80 10.0.0.5:56789 TIME_WAIT
tcp 0 0 192.168.1.100:3306 192.168.1.51:23456 ESTABLISHED
tcp 0 0 192.168.1.100:22 192.168.1.5:54325 ESTABLISHED
tcp 0 0 192.168.1.100:8080 10.0.0.6:34567 SYN_SENT
#!/bin/bash
#网络连接状态分析
#统计连接状态
echo "===网络连接状态分析==="
awk 'NR>2 {
states[$6]++
}
END{
print "连接状态统计"
for (state in states){
print " " state ":" states[state]
}
}' netstat_output.txt
#识别异常连接状态
echo -e "\n异常连接状态:"
awk 'NR>2 && ($6=="SYN_SENT" || $6=="TIME_WAIT"){
if($6=="SYN_SENT"){
syn_sent[$5]++
}
else if ($6=="TIME_WAIT"){
time_wait[$5]++
}
}
END {
if (length(syn_sent)>0){
print "SYN_SENT连接(可能的连接问题):"
for (addr in syn_sent){
print " "addr":"syn_sent[addr]"个连接"
}
}
if(length(time_wait)>0){
print "TIME_WAIT连接(正常但较多)"
for (addr in time_wait){
print " "addr":"time_wait[addr]"个连接"
}
}
}' netstat_output.txt