跳到主要内容

设计一个shell 程序,在每月第一天备份并压缩/etc 目录的所有内容,存放在/root/bak 目录里,且文件名为如下形式yymmdd_etc,yy 为年,mm为月,dd 为日。Shell 程序 fileback 存放在/usr/bin 目录下

参考答案:

下面是一个简单的Shell脚本示例,它会在每月的第一天备份/etc目录并压缩内容,存放在/root/bak目录里,文件名遵循yymmdd_etc的格式。请按照以下步骤操作:

  1. 首先,确保你有权限在/usr/bin目录下创建文件,以及/root/bak目录存在并且有适当的写入权限。

  2. 使用你喜欢的文本编辑器(比如vinano)创建脚本文件:

sudo vi /usr/bin/fileback
  1. 将以下内容粘贴到编辑器中:
#!/bin/bash

# 定义备份目录
BACKUP_DIR="/root/bak"

# 获取当前日期
CURRENT_DATE=$(date +"%Y%m%d")

# 获取当前月份的第一天
FIRST_DAY_OF_MONTH=$(date -d "$(date +'%Y-%m-01')" +"%Y%m%d")

# 如果今天是该月的第一天,则执行备份
if [ "$CURRENT_DATE" = "$FIRST_DAY_OF_MONTH" ]; then
    # 创建备份文件名
    BACKUP_FILE="${FIRST_DAY_OF_MONTH}_etc.tar.gz"
    
    # 创建备份文件的完整路径
    BACKUP_PATH="${BACKUP_DIR}/${BACKUP_FILE}"
    
    # 检查备份目录是否存在,不存在则创建
    if [ ! -d "$BACKUP_DIR" ]; then
        mkdir -p "$BACKUP_DIR"
    fi
    
    # 使用tar命令压缩/etc目录
    tar -czvf "$BACKUP_PATH" /etc
    
    # 检查备份是否成功
    if [ $? -eq 0 ]; then
        echo "Backup created successfully: $BACKUP_PATH"
    else
        echo "Backup failed!"
    fi
fi
  1. 保存并退出编辑器。

  2. 为脚本添加执行权限:

sudo chmod +x /usr/bin/fileback
  1. (可选)为了自动执行这个脚本,你可以将其添加到cron任务中。打开crontab编辑界面:
sudo crontab -e
  1. 在打开的编辑器中,添加以下行来每月的第一天自动运行脚本(请确保cron服务正在运行):
0 0 1 * * /usr/bin/fileback

这条cron表达式意味着“在每个月的第一天(1号)的午夜(00:00)运行fileback脚本”。

  1. 保存并退出crontab编辑器。

现在,fileback脚本已经设置好了,并且cron任务会在每个月的第一天自动运行它。如果脚本成功执行,你将在/root/bak目录中看到名为yymmdd_etc.tar.gz的备份文件,其中yymmdd是当月的第一天日期。

请注意,这个脚本假设你的系统使用GNU版本的date命令,它支持-d选项来解析日期字符串。此外,你需要确保/usr/bin目录和/root/bak目录的权限设置得当,以便脚本能够正确执行和写入备份文件。