首页 > 系统相关 >Linux shell脚本实战案例

Linux shell脚本实战案例

时间:2024-08-16 12:52:37浏览次数:13  
标签:实战 脚本 shell backup 备份 案例 Linux BACKUP DIR

文章目录


Linux Shell脚本是自动化任务和系统管理的强大工具。下面我将提供几个实用的Shell脚本案例,这些案例覆盖了从基础到稍微复杂的应用场景。

1. 基础案例:显示系统信息

这个脚本会显示一些基本的系统信息,如主机名、内核版本等。

#!/bin/bash

echo "Hostname: $(hostname)"
echo "Kernel Version: $(uname -r)"
echo "OS: $(uname -o)"

2. 文件备份案例

这个脚本会将指定目录下的文件备份到另一个位置,并以当前日期命名备份文件夹。

#!/bin/bash

SOURCE_DIR="/path/to/source"
BACKUP_DIR="/path/to/backup"

DATE=$(date +%Y%m%d)
BACKUP_TARGET="$BACKUP_DIR/$DATE"

mkdir -p "$BACKUP_TARGET"
rsync -avz --delete "$SOURCE_DIR/" "$BACKUP_TARGET"

3. 自动安装软件案例

这个脚本可以用来自动安装一个软件包(例如,Nginx),它适用于Debian或Ubuntu系统。

#!/bin/bash

sudo apt-get update
sudo apt-get install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx

4. 批量重命名文件案例

此脚本会将指定目录中的所有文件重命名为小写,并添加一个前缀。

#!/bin/bash

DIR="/path/to/directory"
PREFIX="prefix_"

for FILE in "$DIR"/*; do
    if [ -f "$FILE" ]; then
        NEW_NAME="$PREFIX${FILE##*/}"
        NEW_NAME="${NEW_NAME^^}"
        mv "$FILE" "$DIR/$NEW_NAME"
    fi
done

5. 监控磁盘空间案例

该脚本定期检查磁盘空间使用情况,并通过邮件发送警告,如果使用率超过某个阈值。

#!/bin/bash

THRESHOLD=90
MOUNT_POINT="/mnt/data"
EMAIL="[email protected]"

usage=$(df -h "$MOUNT_POINT" | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $usage -ge $THRESHOLD ]; then
    echo "Warning: Disk usage on $MOUNT_POINT is at $usage%" | mail -s "Disk Space Alert" $EMAIL
fi

请确保在运行这些脚本之前,你已经赋予它们执行权限,例如通过 chmod +x scriptname.sh 命令。同时,根据你的具体需求调整脚本中的路径和其他参数。

下面是几个更复杂的Shell脚本案例,它们涵盖了更广泛的用途,包括错误处理、日志记录、定时任务等。

6. 定时任务案例:定期清理日志文件

这个脚本会定期压缩并删除旧的日志文件,保持日志文件的新鲜度。

#!/bin/bash

LOG_DIR="/var/log"
KEEP_DAYS=7

# 检查日志目录是否存在
if [ ! -d "$LOG_DIR" ]; then
    echo "Error: Log directory does not exist."
    exit 1
fi

# 清理日志文件
find "$LOG_DIR" -maxdepth 1 -type f -mtime +$KEEP_DAYS -exec gzip {} \;
find "$LOG_DIR" -maxdepth 1 -type f -mtime +$((KEEP_DAYS+7)) -delete

7. 错误处理和日志记录案例:安全地运行命令

这个脚本会尝试运行一个命令,并记录成功或失败的信息。

#!/bin/bash

COMMAND="your_command_here"
LOG_FILE="/var/log/command.log"

# 运行命令并捕获输出
output=$($COMMAND 2>&1)

# 检查命令是否成功
if [ $? -eq 0 ]; then
    echo "$(date): Command succeeded: $output" >> $LOG_FILE
else
    echo "$(date): Command failed: $output" >> $LOG_FILE
fi

8. 备份数据库案例:定期备份MySQL数据库

此脚本会定期备份MySQL数据库到指定的位置,并通过邮件发送通知。

#!/bin/bash

DB_USER="db_user"
DB_PASS="db_password"
DB_NAME="database_name"
BACKUP_DIR="/path/to/backup"
EMAIL="[email protected]"

DATE=$(date +%Y%m%d-%H%M%S)
DUMP_FILE="$BACKUP_DIR/db_backup_$DATE.sql"

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

# 备份数据库
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $DUMP_FILE

# 检查备份文件是否存在
if [ -f "$DUMP_FILE" ]; then
    echo "Database backup created successfully." | mail -s "Database Backup" $EMAIL
else
    echo "Database backup failed." | mail -s "Database Backup Failed" $EMAIL
fi

9. 系统监控案例:CPU和内存使用率

此脚本每隔一段时间报告一次CPU和内存使用率,并记录到日志文件中。

#!/bin/bash

LOG_FILE="/var/log/system_usage.log"

while true; do
    CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}')
    MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0"%"}')

    echo "$(date): CPU Usage: $CPU_USAGE, Memory Usage: $MEM_USAGE" >> $LOG_FILE
    sleep 60
done

10. 用户管理案例:创建新用户并设置密码

此脚本会创建一个新用户,并设置密码。

#!/bin/bash

USERNAME="new_user"
PASSWORD="password123"

# 创建用户
sudo useradd -m $USERNAME
# 设置密码
echo "$USERNAME:$PASSWORD" | sudo chpasswd
# 添加到sudoers组
sudo usermod -aG sudo $USERNAME

确保在使用这些脚本之前,你已经仔细阅读并理解了脚本的内容,必要时进行适当的修改以适应你的环境。此外,对于敏感操作(如创建用户或修改数据库),确保在安全的环境中测试脚本。

让我们创建一个综合性的脚本,它结合了前面提到的一些功能,例如文件备份、错误处理、日志记录和邮件通知。

综合案例:自动备份重要文件并发送邮件通知

这个脚本将会备份指定目录下的文件到另一个位置,并通过邮件发送备份状态的通知。如果备份过程中出现任何问题,它还会记录错误日志。

脚本说明:
  1. 备份源目录目标目录 需要提前定义好。
  2. 邮件配置 包括发件人邮箱、收件人邮箱和SMTP服务器信息。
  3. 日志文件 将记录备份过程中的所有输出。
  4. 错误处理 确保即使部分备份失败,脚本也能继续运行其他部分。
脚本代码:
#!/bin/bash

# 配置
SOURCE_DIR="/path/to/source"
BACKUP_DIR="/path/to/backup"
LOG_FILE="/var/log/backup.log"
EMAIL="[email protected]"
SMTP_SERVER="smtp.example.com"
FROM_EMAIL="[email protected]"

# 日期用于备份文件夹
DATE=$(date +%Y%m%d-%H%M%S)
BACKUP_TARGET="$BACKUP_DIR/$DATE"

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

# 日志函数
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') $@" >> "$LOG_FILE"
}

# 发送邮件函数
send_email() {
    subject="$1"
    body="$2"
    echo -e "$body" | mail -s "$subject" -S smtp="$SMTP_SERVER" -S from="$FROM_EMAIL" "$EMAIL"
}

# 备份函数
backup() {
    rsync -avz --delete "$SOURCE_DIR/" "$BACKUP_TARGET"
    if [ $? -eq 0 ]; then
        log "Backup completed successfully to $BACKUP_TARGET"
        send_email "Backup Successful" "Backup completed successfully to $BACKUP_TARGET"
    else
        log "Backup failed"
        send_email "Backup Failed" "Backup failed."
    fi
}

# 主程序
log "Starting backup process..."

# 备份
backup

log "Backup process completed."

使用说明:

  1. 编辑脚本:替换/path/to/source/path/to/backup[email protected]smtp.example.com[email protected] 为实际的路径和邮箱地址。
  2. 权限:确保脚本具有执行权限,例如使用 chmod +x backup_script.sh
  3. 运行脚本:直接运行脚本,例如 ./backup_script.sh

注意事项:

  • 确保SMTP服务器支持无身份验证或已正确配置了身份验证。
  • 如果需要加密邮件传输,请考虑使用 openssl s_client 或其他方法。
  • 根据实际情况调整日志级别和详细程度。

这个脚本是一个较为完整的示例,包含了备份、错误处理、日志记录以及邮件通知的功能。你可以根据自己的需求进一步扩展和定制它。

标签:实战,脚本,shell,backup,备份,案例,Linux,BACKUP,DIR
From: https://blog.csdn.net/qqrrjj2011/article/details/141213709

相关文章

  • Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI
    Xinference实战指南:全面解析LLM大模型部署流程,携手Dify打造高效AI应用实践案例,加速AI项目落地进程XorbitsInference(Xinference)是一个开源平台,用于简化各种AI模型的运行和集成。借助Xinference,您可以使用任何开源LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并......
  • Linux进程管理(保姆级教程)
    目录一、Linux中的进程和服务二、service服务管理(CentOS6版本-了解)(1).基本语法(2).经验技巧(3).案例实操三、chkconfig设置后台服务的自启配置(CentOS6版本)(1).基本语法(2).Linux运行级别(3).ntsysv服务界面控制自启动针对级别2345(4).案例实操四、systemctl(Ce......
  • Linux/Go环境搭建, HelloWorld运行
    packagemainimport"fmt"funcmain(){fmt.Printf("Hello,World!!!\n")}以上是Go语言的经典HelloWorld程序源代码。Linux/GO环境搭建作者初学Linux/Go时,是通过Go的命令行工具来编译运行第一个Go程序HelloWorld:$gobuildHelloWorld.go这里go是一个可执行......
  • ECMAScript性能调优艺术:深度挖掘与实战避坑
    ECMAScript性能调优艺术:深度挖掘与实战避坑在Web开发的广阔天地中,ECMAScript(即JavaScript的标准化版本)的性能调优不仅是技术层面的挑战,更是艺术层面的追求。本文旨在深入探讨ECMAScript性能优化的各种技巧,并揭示隐藏在日常编码中的性能陷阱,帮助开发者在追求高性能的道路上......
  • 【Linux】冯诺依曼体系
    冯诺依曼体系冯诺依曼体系结构是我们计算机组成的基本架构中央处理器(CPU):中央处理器是冯·诺伊曼体系的核心部分,负责执行计算机程序中的指令。它包括算术逻辑单元(ALU)和控制单元(CU)。ALU负责执行算术和逻辑操作,而CU控制数据流和指令执行的顺序。存储器:存储器用于存储程......
  • 均线通道与K线中值突破程序化交易实战策略
    //策略说明://基于平移的高点和低点均线通道与K线中值突破进行判断//系统要素://1.MyRangeLeader是个当前K线的中点在之前K线的最高点上,且当前K线的振幅大于之前K线的振幅的K线//2.计算高点和低点的移动平均线//入场条件://1、上根K线为RangeLead,并且上一根收盘......
  • R语言基于日期范围筛选数据实战:日期范围之内的数据、日期范围之外的数据、日期之后的
    R语言基于日期范围筛选数据实战:日期范围之内的数据、日期范围之外的数据、日期之后的数据、日期之前的数据目录R语言基于日期范围筛选数据实战(SubsetbyaDateRange)#基于日期范围筛选数据语法#基于日期范围筛选数据(日期范围内的数据)#基于日期范围筛选数据(日期范围外的......
  • linux:有关目录、链接文件的函数 Makefil、gdb的使用
    目录函数1.getpwuidstructpasswd*getpwuid(uid_tuid);功能:   根据用户id到/etc/passwd文件下解析获得   结构体信息参数:uid:用户id返回值:   成功返回id对应用户的信息   失败返回NULLpasswd 结构体的定义通常如下所示structpasswd{......
  • R语言ggplot2可视化实战:将可视化图像的标题(title)放置在图像的左下角
     R语言ggplot2可视化实战:将可视化图像的标题(title)放置在图像的左下角(customizetitlepositoninbottomleftofggplot2graph)目录R语言ggplot2可视化:将可视化图像的标题(title)放置在图像的左下角(customizetitlepositoninbottomleftofggplot2graph)#仿真数据......
  • Linux:开发工具(1)
    一、软件包管理器yum1.1Linux下安装软件的方式1、源代码安装(直接给你源码,你去进行编译——对用户要求太高!)    但是这样的话,就不光是源码,还需要把别人的一些相关编译环境配置也得搞过来,比如说我这个代码是用C语言写的,那么我们就需要C语言相关的编译器和库。对使用......