Linux系统入门:Shell脚本进阶与实用案例

Linux系统入门:Shell脚本进阶与实用案例


📑 目录

  1. ⚙️ 高效批量文件处理脚本
  2. 🔄 自动化任务调度与执行
  3. 📊 日志分析与报告生成
  4. 🔧 系统监控与资源管理脚本
  5. 📦 数据备份与恢复自动化

⚙️ 高效批量文件处理脚本

在 Linux 系统中,批量处理文件是常见的任务,尤其是在面对大量文件时,通过手动操作效率极低。使用 Shell 脚本可以显著提高文件处理效率。以下将详细解析一个批量重命名文件的脚本案例,并结合实际应用场景进行拓展。

📜 批量重命名文件脚本

假设有一个文件夹 images/,其中包含了大量图片文件,文件名是无序的,现在需要将这些文件按日期重命名。

#!/bin/bash

# 获取当前日期,作为文件重命名的前缀
date_prefix=$(date +%Y%m%d)

# 遍历文件夹中的所有文件
for file in images/*; do
  # 获取文件的扩展名
  extension="${file##*.}"
  # 使用日期和递增的数字重命名文件
  mv "$file" "images/${date_prefix}_$RANDOM.$extension"
done

此脚本首先获取当前日期,并将其作为文件重命名的前缀。接着,使用 for 循环遍历 images/ 文件夹中的所有文件,并通过 mv 命令将其重命名为 日期_随机数.扩展名 的格式。$RANDOM 变量生成一个随机数,以确保每个文件名唯一。

🌟 案例拓展:批量转换图片格式

在上述批量重命名的基础上,可以进一步拓展为批量转换图片格式的脚本。例如,将所有 PNG 格式的图片转换为 JPG 格式,并保留原始文件的备份。

#!/bin/bash

# 创建一个备份目录
mkdir -p images_backup

# 遍历文件夹中的所有 PNG 文件
for file in images/*.png; do
  # 复制文件到备份目录
  cp "$file" images_backup/
  # 获取文件的基名(不含扩展名)
  basename=$(basename "$file" .png)
  # 使用 convert 命令将 PNG 转换为 JPG
  convert "$file" "images/${basename}.jpg"
done

该脚本使用 convert 命令将 PNG 格式的图片转换为 JPG 格式,并将原始文件备份到 images_backup/ 目录中。这样可以确保即使转换过程中出现问题,原始文件也不会丢失。


🔄 自动化任务调度与执行

Linux 系统中的 cron 是一个强大的任务调度工具,结合 Shell 脚本,可以实现各种自动化任务的定期执行。例如,定期清理系统日志、备份数据库、发送报告邮件等。以下是一个使用 cron 和 Shell 脚本实现自动化任务调度的案例解析。

🕒 定期清理系统日志

为了节省磁盘空间,定期清理系统日志是必要的。通过一个 Shell 脚本,可以轻松实现日志的定期清理,并将其集成到 cron 中,设置自动执行。

#!/bin/bash

# 指定日志目录和保留的天数
log_dir="/var/log"
retain_days=7

# 查找并删除超过保留天数的日志文件
find "$log_dir" -type f -name "*.log" -mtime +$retain_days -exec rm -f {} \;

上述脚本通过 find 命令查找日志目录下所有超过 7 天的日志文件,并使用 rm 命令将其删除。然后,将此脚本添加到 cron 中,实现自动化调度。

# 编辑 crontab 文件
crontab -e

# 添加以下任务调度规则,每天凌晨 2 点执行清理脚本
0 2 * * * /path/to/cleanup_logs.sh

这种方式能够有效管理系统日志,避免磁盘空间被无用的日志文件占据。

🌟 案例拓展:定期备份数据库

除了清理日志,还可以将数据库的定期备份任务也自动化。例如,使用 mysqldump 工具结合 Shell 脚本,每天备份一次数据库,并将其保存到指定目录。

#!/bin/bash

# 设置数据库连接信息
db_user="root"
db_password="password"
db_name="my_database"
backup_dir="/backup/mysql"

# 创建备份目录
mkdir -p "$backup_dir"

# 生成备份文件名
backup_file="${backup_dir}/backup_$(date +%Y%m%d).sql"

# 进行数据库备份
mysqldump -u"$db_user" -p"$db_password" "$db_name" > "$backup_file"

此脚本使用 mysqldump 命令备份指定数据库,并将备份文件保存到 backup/mysql/ 目录中。通过将此脚本集成到 cron,可以每天自动执行备份任务。


📊 日志分析与报告生成

日志文件是系统运行状态的记录,通过分析日志文件,可以发现系统中存在的异常或问题。使用 Shell 脚本,可以自动化日志分析,并生成报告。以下是一个基于 Apache 日志的分析脚本案例。

📜 分析 Apache 日志中的 IP 访问量

通过分析 Apache 日志中的访问 IP,可以了解系统被访问的频率和分布情况。以下脚本统计访问次数最多的前 10 个 IP 地址,并生成报告。

#!/bin/bash

# 指定 Apache 日志文件路径
log_file="/var/log/apache2/access.log"

# 统计访问次数最多的前 10 个 IP
awk '{print $1}' "$log_file" | sort | uniq -c | sort -nr | head -n 10 > top_ips.txt

# 生成报告
echo "Top 10 IP Addresses by Access Count:" > report.txt
cat top_ips.txt >> report.txt

该脚本首先使用 awk 提取日志文件中的 IP 地址,然后通过 sortuniq 命令统计每个 IP 的访问次数,并将结果输出到 top_ips.txt 文件中。最后,生成包含统计结果的报告文件 report.txt

🌟 案例拓展:自动发送日志分析报告

生成报告后,可以进一步拓展脚本,实现自动将报告发送到指定邮箱。

#!/bin/bash

# 设置邮件信息
recipient="admin@example.com"
subject="Apache Log Analysis Report"
body="Please find the attached report for Apache log analysis."
report_file="report.txt"

# 发送邮件
mail -s "$subject" -a "$report_file" "$recipient" <<< "$body"

通过 mail 命令可以将报告文件作为附件发送到指定邮箱,实现日志分析的自动化与可视化。


🔧 系统监控与资源管理脚本

系统监控是维护系统稳定运行的基础。通过 Shell 脚本,可以实现实时监控系统资源,如 CPU、内存、磁盘使用率等,并在超过阈值时发出警报。

📈 实时监控 CPU 使用率

以下是一个实时监控 CPU 使用率的脚本,若 CPU 使用率超过 80%,则记录警报信息并发送邮件通知。

#!/bin/bash

# 获取 CPU 使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')

# 设置报警阈值
threshold=80

# 判断 CPU 使用率是否超过阈值
if (( $(echo "$cpu_usage > $threshold" | bc -l) )); then
  echo "High CPU Usage: $cpu_usage%" >> cpu_alert.txt
  # 发送报警邮件
  mail -s "CPU Usage Alert" admin@example.com < cpu_alert.txt
fi

该脚本使用 top 命令获取当前 CPU 使用率,并通过 bc 进行浮点数比较。如果 CPU 使用率超过设定的阈值(80%),则记录警报信息并发送邮件通知管理员。

🌟 案例拓展:监控内存与磁盘使用率

在监控 CPU 的基础上,可以进一步拓展脚本,实现对内存和磁盘使用率的监控。

#!/bin/bash

# 获取内存使用率
mem_usage=$(free | grep Mem | awk '{print $3/$2 * 100.0}')

# 获取磁盘使用率
disk_usage=$(df / | grep / | awk '{print $5}' | sed 's/%//g')

# 设置报警阈值
mem_threshold=80
disk_threshold=90

# 判断内存使用率是否超过阈值
if (( $(echo "$mem_usage > $mem_threshold" | bc

 -l) )); then
  echo "High Memory Usage: $mem_usage%" >> mem_alert.txt
  mail -s "Memory Usage Alert" admin@example.com < mem_alert.txt
fi

# 判断磁盘使用率是否超过阈值
if [ "$disk_usage" -gt "$disk_threshold" ]; then
  echo "High Disk Usage: $disk_usage%" >> disk_alert.txt
  mail -s "Disk Usage Alert" admin@example.com < disk_alert.txt
fi

通过此脚本,可以实时监控内存和磁盘的使用率,并在超过设定阈值时发出警报。这种监控机制能够帮助及时发现系统资源的异常使用情况,防止系统因资源耗尽而崩溃。


📦 数据备份与恢复自动化

数据备份与恢复是保障系统数据安全的关键环节。使用 Shell 脚本可以自动化数据备份与恢复过程,确保数据在出现故障时能够及时恢复。以下是一个基于 tar 命令的数据备份与恢复脚本。

🗄️ 数据备份脚本

假设需要备份 /etc 目录下的所有配置文件,并将其存储在 /backup 目录中。

#!/bin/bash

# 设置备份目录
backup_dir="/backup"

# 获取当前日期,作为备份文件名的一部分
date_suffix=$(date +%Y%m%d)

# 创建备份文件
tar -czvf "$backup_dir/etc_backup_$date_suffix.tar.gz" /etc

该脚本使用 tar 命令将 /etc 目录下的所有文件打包压缩,并将生成的备份文件存储在 /backup 目录中。备份文件名中包含当前日期,便于日后查找与管理。

🌟 案例拓展:自动化备份恢复

在备份的基础上,可以进一步编写恢复脚本,实现数据的自动化恢复。

#!/bin/bash

# 设置备份文件路径
backup_file="/backup/etc_backup_$(date +%Y%m%d).tar.gz"

# 恢复备份文件到指定目录
tar -xzvf "$backup_file" -C /

该恢复脚本通过解压缩备份文件,将 /etc 目录下的配置文件恢复到系统中。结合 cron 任务调度,可以实现定期自动备份,保证数据的安全性与可恢复性。

  • 18
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Switch616

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值