题目9:系统备份文件管理
描述:管理备份文件,自动清理过期备份并生成备份报告。
测试数据(保存为 backup_files.txt):
-rw-r--r-- 1 root root 104857600 Dec 1 10:30 database_backup_20231201_1030.sql.gz
-rw-r--r-- 1 root root 103809024 Nov 30 10:25 database_backup_20231130_1025.sql.gz
-rw-r--r-- 1 root root 102760448 Nov 29 10:20 database_backup_20231129_1020.sql.gz
-rw-r--r-- 1 root root 101711872 Nov 28 10:15 database_backup_20231128_1015.sql.gz
-rw-r--r-- 1 root root 100663296 Nov 27 10:10 database_backup_20231127_1010.sql.gz
-rw-r--r-- 1 root root 99614720 Nov 26 10:05 database_backup_20231126_1005.sql.gz
-rw-r--r-- 1 root root 98566144 Nov 25 10:00 database_backup_20231125_1000.sql.gz
-rw-r--r-- 1 root root 97517568 Nov 24 09:55 database_backup_20231124_0955.sql.gz
-rw-r--r-- 1 root root 96468992 Nov 23 09:50 database_backup_20231123_0950.sql.gz
-rw-r--r-- 1 root root 95420416 Nov 22 09:45 database_backup_20231122_0945.sql.gz
-rw-r--r-- 1 root root 94371840 Nov 21 09:40 database_backup_20231121_0940.sql.gz
-rw-r--r-- 1 root root 93323264 Nov 20 09:35 database_backup_20231120_0935.sql.gz
-rw-r--r-- 1 root root 92274688 Nov 19 09:30 database_backup_20231119_0930.sql.gz
-rw-r--r-- 1 root root 91226112 Nov 18 09:25 database_backup_20231118_0925.sql.gz
-rw-r--r-- 1 root root 90177536 Nov 17 09:20 database_backup_20231117_0920.sql.gz
-rw-r--r-- 1 root root 89128960 Nov 16 09:15 database_backup_20231116_0915.sql.gz
-rw-r--r-- 1 root root 88080384 Nov 15 09:10 database_backup_20231115_0910.sql.gz
-rw-r--r-- 1 root root 87031808 Nov 14 09:05 database_backup_20231114_0905.sql.gz
-rw-r--r-- 1 root root 85983232 Nov 13 09:00 database_backup_20231113_0900.sql.gz
-rw-r--r-- 1 root root 84934656 Nov 12 08:55 database_backup_20231112_0855.sql.gz
-rw-r--r-- 1 root root 83886080 Nov 11 08:50 database_backup_20231111_0850.sql.gz
-rw-r--r-- 1 root root 82837504 Nov 10 08:45 database_backup_20231110_0845.sql.gz
-rw-r--r-- 1 root root 81788928 Nov 9 08:40 database_backup_20231109_0840.sql.gz
-rw-r--r-- 1 root root 80740352 Nov 8 08:35 database_backup_20231108_0835.sql.gz
-rw-r--r-- 1 root root 79691776 Nov 7 08:30 database_backup_20231107_0830.sql.gz
-rw-r--r-- 1 root root 78643200 Nov 6 08:25 database_backup_20231106_0825.sql.gz
-rw-r--r-- 1 root root 77594624 Nov 5 08:20 database_backup_20231105_0820.sql.gz
-rw-r--r-- 1 root root 76546048 Nov 4 08:15 database_backup_20231104_0815.sql.gz
-rw-r--r-- 1 root root 75497472 Nov 3 08:10 database_backup_20231103_0810.sql.gz
-rw-r--r-- 1 root root 74448896 Nov 2 08:05 database_backup_20231102_0805.sql.gz
bash
#!/bin/bash
#备份文件管理脚本
#当前日期
current_date=$(date +%s)
#分析备份文件
echo "备份文件统计:"
awk '{
#提取文件大小和日期
size=$5;
date_str=$6" "$7" "$8" "
filename=$9
#累计总大小
total_size+=size
file_count++
#按日期分类
dates[date_str]++
# 按大小分类
if (size>100000000){
large_file++
}else if (size>50000000){
medium_file++
}else {
small_files++
}
}END{
print " 总文件数: " file_count
print " 总大小: " int(total_size/1024/1024) " MB"
print " 大文件 (>100MB): " large_files
print " 中等文件 (50-100MB): " medium_files
print " 小文件 (<50MB): " small_files
print "\n按日期统计:"
for (date in dates) {
print " " date ": " dates[date] " 个文件"
}
}' backup_files.txt
#识别过期备份(假设保留三十天)
echo -e "\n===过期备份识别==="
awk -v current_date=$(date +%s)'{
#提取文件日期
mount=$6
day=$7
time=$8
#简化日期处理(实际应用中需要更精确的日期计算)
filename=$9
if(NR>10){#模拟过期文件
print" ⚠️ 过期备份: " filename " (建议清理)"
expired_size+=$5
}
}END{
if (expired_count > 0) {
print "\n 过期文件统计:"
print " 数量: " expired_count " 个"
print " 大小: " int(expired_size/1024/1024) " MB"
print " 可释放空间: " int(expired_size/1024/1024) " MB"
} else {
print" ✅ 没有发现过期备份"
}
}' backup_files.txt
#备份的策略
echo -e "\n===备份策略建议==="
total_files=$(wc -l < backup_files.txt)
total_size_mb=$(awk '{sum += $5} END{print int(sum/1024/1024)}' backup_files.txt)
echo " 📊 当前备份情况:"
echo " 文件数量: $total_files 个"
echo " 总大小: $total_size_mb MB"
if [[ $total_size_mb -gt 5000 ]]; then
echo " ⚠️ 备份文件占用空间较大,建议定期清理"
fi
echo " 💡 建议的备份保留策略:"
echo " - 每日备份: 保留7天"
echo " - 每周备份: 保留4周"
echo " - 每月备份: 保留12个月"
echo " - 年度备份: 永久保留"
题目10:系统性能趋势分析
描述:分析系统监控数据,识别性能趋势并预测潜在问题。
测试数据(保存为 system_metrics.txt):
2023-12-01 00:00:00|CPU:25.3%|MEM:68.1%|DISK:/=25%,/home=88%|NET:rx=1.2MB,tx=0.8MB
2023-12-01 01:00:00|CPU:18.7%|MEM:65.2%|DISK:/=25%,/home=88%|NET:rx=0.9MB,tx=0.6MB
2023-12-01 02:00:00|CPU:12.4%|MEM:62.8%|DISK:/=25%,/home=88%|NET:rx=0.7MB,tx=0.5MB
2023-12-01 03:00:00|CPU:8.9%|MEM:60.1%|DISK:/=25%,/home=88%|NET:rx=0.5MB,tx=0.3MB
2023-12-01 04:00:00|CPU:5.6%|MEM:58.3%|DISK:/=25%,/home=88%|NET:rx=0.3MB,tx=0.2MB
2023-12-01 05:00:00|CPU:12.8%|MEM:59.7%|DISK:/=25%,/home=88%|NET:rx=0.6MB,tx=0.4MB
2023-12-01 06:00:00|CPU:28.4%|MEM:63.2%|DISK:/=25%,/home=88%|NET:rx=1.5MB,tx=1.1MB
2023-12-01 07:00:00|CPU:42.6%|MEM:67.8%|DISK:/=25%,/home=88%|NET:rx=2.8MB,tx=2.1MB
2023-12-01 08:00:00|CPU:56.7%|MEM:72.3%|DISK:/=25%,/home=88%|NET:rx=4.2MB,tx=3.5MB
2023-12-01 09:00:00|CPU:68.9%|MEM:76.5%|DISK:/=25%,/home=88%|NET:rx=5.1MB,tx=4.2MB
2023-12-01 10:00:00|CPU:75.2%|MEM:79.8%|DISK:/=25%,/home=88%|NET:rx=5.8MB,tx=4.8MB
2023-12-01 11:00:00|CPU:82.4%|MEM:83.1%|DISK:/=25%,/home=88%|NET:rx=6.2MB,tx=5.1MB
2023-12-01 12:00:00|CPU:88.7%|MEM:85.6%|DISK:/=25%,/home=88%|NET:rx=6.5MB,tx=5.3MB
2023-12-01 13:00:00|CPU:92.3%|MEM:87.2%|DISK:/=25%,/home=88%|NET:rx=6.7MB,tx=5.4MB
2023-12-01 14:00:00|CPU:89.6%|MEM:86.8%|DISK:/=25%,/home=88%|NET:rx=6.3MB,tx=5.1MB
2023-12-01 15:00:00|CPU:85.2%|MEM:85.1%|DISK:/=25%,/home=88%|NET:rx=5.9MB,tx=4.7MB
2023-12-01 16:00:00|CPU:78.9%|MEM:82.7%|DISK:/=25%,/home=88%|NET:rx=5.2MB,tx=4.1MB
2023-12-01 17:00:00|CPU:71.3%|MEM:80.2%|DISK:/=25%,/home=88%|NET:rx=4.6MB,tx=3.6MB
2023-12-01 18:00:00|CPU:62.7%|MEM:77.5%|DISK:/=25%,/home=88%|NET:rx=3.8MB,tx=2.9MB
2023-12-01 19:00:00|CPU:53.4%|MEM:74.1%|DISK:/=25%,/home=88%|NET:rx=3.1MB,tx=2.3MB
2023-12-01 20:00:00|CPU:41.8%|MEM:70.6%|DISK:/=25%,/home=88%|NET:rx=2.4MB,tx=1.7MB
2023-12-01 21:00:00|CPU:32.6%|MEM:67.2%|DISK:/=25%,/home=88%|NET:rx=1.8MB,tx=1.2MB
2023-12-01 22:00:00|CPU:24.1%|MEM:64.8%|DISK:/=25%,/home=88%|NET:rx=1.3MB,tx=0.9MB
2023-12-01 23:00:00|CPU:16.8%|MEM:62.3%|DISK:/=25%,/home=88%|NET:rx=0.9MB,tx=0.6MB
bash
#!/bin/bash
#系统性能趋势分析
echo "===系统性能趋势分析报告==="
#分析CPU使用趋势
echo "=== CPU使用率分析 ==="
awk -F'|' '{
#提取CPU使用率
split($2,cpu_parts,":")
cpu_usage=substr(cpu_part[2],1,length(cpu_parts[2]-1))
#统计
total_cpu+=cpu_usage
count++
#找出峰值
if (cpu_usage>max_cpu){
max_usage=cpu_usage
max_time=$1
}
#找出最低值
if(NR==1||cpu_usage<min_cpu){
min_cpu=cpu_usage
min_time =$1
}
#按时间段分类
hour=substr($1,12,2)
hourly_cpu[hour]+=cpu_usage
hourly_count[hour]++
}
END{
avg_cpu=total_cpu/count
print"平均cpu使用率:"sprint("%%.1f%",avg_cpu)
print"最高cpu使用率:"max_cpu"% (时间:"max_time")"
print"最低cpu使用率:"min_cpu"% (时间:"min_time")"
#识别高峰时段
print"\n各小时平均cpu使用率:"
for(h in hourly){
avg=hourly_cpu[h]/hour_count[h]
if(avg>70){
level=""
} else if (avg>50){
level=""
}else{
level=""
}
printf" %02d:00 - %02d:59: %.1f%% %s\n",h,h,avg,level
}
}' system_metrics.txt
#分析内存使用趋势
echo -e "\n===内存使用率分析==="
awk -F'|' '{
#提取内存使用率
split($3,mem_parts,":")
mem_usage=substr(mem_parts[2],1,length(mem_parts[2])-1)
#统计
total_mem+=mem_usage
count ++
#找出峰值
if(mem_usage>max_mem){
mem_mem=max_usage
max_time=$1
}
}END{
avg_mem=total_mem/count
print"平均内存使用率:"sprintf(%.1f%%,avg_mem)
print"最大内存使用率:"max_mem"%(时间:"max_time")"
if(avg_mem>80){
print "⚠️ 内存使用率偏高,建议检查内存泄漏"
}else if (avg_mem>60){
print "ℹ️ 内存使用率正常"
}else{
print "✅ 内存使用率较低,系统资源充足"
}
}' system_metrics.txt
#分析磁盘使用情况
echo -e "\n===磁盘使用情况==="
awk -F'|' '{
#提取磁盘使用率
disk_info=$4
#简化处理,实际应用中需要解析具体的挂载点和使用率
if (index(disk_info,"home=88")>0){
high_disk_usage++
}
}END{
if(high_disk_usage>0){
print "⚠️ /home 分区使用率较高 (88%),建议清理空间"
}else {
print "✅ 磁盘空间使用正常"
}
}' systemc_metrics.txt
#性能趋势预测
echo -e "\n===性能趋势预测==="
awk -F'|' ' NR>=20 {
#分析最近四小时的cpu趋势
split($,cpu_parts,":")
cpu_usage=substr(cpu_parts[2],1,length(cpu_parts[2])-1)
recent_cpu[NR]=cpu_usage
}END{
#简单的线性趋势分析
if(length(recent_cpu)>=4){
sum=0
for(i in recent_cpu){
sum+=recent_cpu[i]
}
avg_recent=sum/length(recent_cpu)
#如果最近平均值高于整体平均值,说明负载在上升
overall_avg=50 #假设的整体平均值
if(avg_recent>overall_avg+10){
print "📈 负载呈上升趋势,建议关注系统性能"
}else if (avg_recent<overall_avg-10){
print "📉 负载呈下降趋势,系统趋于稳定"
} else {
print "➡️ 负载保持稳定"
}
}
}' system_metrics.txt
#优化建议
echo -e "\n===系统优化建议==="
#综合分析各项指标给出建议
cpu_avg=$(awk -F'|' '{split($2,p,":");sum+=substr(p[2],1,length(p[2])-1)}END{print sum/NR}' system_metrics.txt)
mem_avg=$(awk -F'|' '{split($2,p,":");sum+=substr(p[2],1,length(p[2])-1)}END{print sum/NR}' system_metrics.txt)
if(($(echo "$cpu_avg>70"|bc -l)));then
echo " 🔧 CPU使用率偏高,建议:"
echo " - 检查高CPU消耗进程"
echo " - 考虑增加CPU资源"
echo " - 优化应用程序性能"
fi
if(($(echo "$mem_avg>80" | bc -l)));then
echo " 🔧 内存使用率偏高,建议:"
echo " - 检查内存泄漏"
echo " - 增加物理内存"
echo " - 优化应用内存使用"
fi
echo " 📊 建议定期监控系统性能指标"
echo " 📊 建立性能基线,便于异常检测"
echo " 📊 制定容量规划策略"