您的位置:首页 > 运维架构 > Shell

shell学习之系统文件备份之脚本分析

2017-04-04 15:58 645 查看
以下的脚本最主要的一条命令就是:
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES ${SOURCE_DIR[@]} ##创建好的备份目录中,执行备份命令,以下就是一个完整的命令例子:
tar -g /tmp/snapshot -czvf /tmp/2017_full_sysbak.tar.gz /data/sh ##第一次创建快照完整备份,将/data/sh目录打包压缩到/tmp/下并保存为2017_full_sysbak.tar.gz,如果/data/sh下的文件增加了,我们则进行增量备份如下:
tar -g /tmp/snapshot -czvf /tmp/2017_add_sysbak.tar.gz /data/sh/ ----再次利用原来的快照增量备份,只是备份增加的那部分文件

以下的脚本要实现的是规范的备份,可以将其加入到crontab中指定在每晚凌晨执行,例如:
crontab -e
0 0 * * * /bin/bash /data/sh/toolscript/auto_system_backup.sh /var/log/ >>/tmp/backup.log ###每天凌晨执行备份日志目录并追加相关日志信息

-----------------------------脚本auto_system_backup.sh---------------------------------------------------------------------------------
#!/bin/bash
#automatic backup linux system files
#author robin 2017-4-4

#define variable ##参数定义
SOURCE_DIR=( $* ) ##以数组的形式存放需要备份的目录,执行脚本时需要手动指定
TARGET_DIR=/data/backup/ ##指定备份路径
YEAR=`date +%Y` ##年参数,这些都是用于建立层级目录
MONTH=`date +%m` ##月参数
DAY=`date +%d` ##日参数
WEEK=`date +%u` ##星期参数
A_NAME=`date +%H%M` ##时分参数
FILES=${A_NAME}_system_backup.tgz ##定义压缩文件格式,也可以压缩为别的tar.gz等格式
CODE=$? ##判断是否有错

#Juge the inter file exist ###这里首先要判断在执行脚本时有没有指定参数,也就是要备份的目录
if [ -z "$*" ];then #如果没有指定参数则提示你
echo -e "\033[32mUsage:\nPlease Enter Your Backup Files or Directories\n-------------------------------\n\nUsage: { $0 /boot /etc} \033[0m" ##提示信息
exit
fi

#Determine Whether the Target Directory Exists ##注释信息
if [ ! -d $TARGET_DIR/$YEAR/$MONTH/$DAY ];then ##判断当天的备份目录是否存在
mkdir -p $TARGET_DIR/$YEAR/$MONTH/$DAY ##创建该目录
echo -e "\033[32mThe $TARGET_DIR Created Successfully! \033[0m" ##提示信息

#EXEC Full_Backup Function Command ##提示以下是完整备份函数

Full_Backup()
{
if [ "$WEEK" -eq "7" ];then ##这里指定的是周末进行完整备份
rm -rf $TARGET_DIR/snapshot ##首先删除掉原有本分目录下的快照
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf $FILES ${SOURCE_DIR[@]} ##这里就是完整备份的命令,解释一下${SOURCE_DIR[@]},这就是你需要指定的一个或者多个需要备份的目录,以数组形式存在,例如:sh /date/auto_backup.sh /etc /home
[ "$CODE" == "0" ]&&echo -e "----------------------------\n\033[32mThese Full_Backup System Files Backup SuccessFully !\033[0m" ##提示信息,表示如果以上的命令都没有问题则出现提示信息表示成功。下面一个函数也一样
fi
}
#Perform incremental BACPUP Function Command ##提示下面是增量更新的函数

Add_Backup()
{
if [ "$WEEK" -ne "7" ];then ##这里指定的是除开周末则进行增量更新
cd $TARGET_DIR/$YEAR/$MONTH/$DAY ;tar -g $TARGET_DIR/snapshot -czvf update$FILES ${SOURCE_DIR[@]} ##这条语句的差别与上面一条在于备份名字罢了
[ "$CODE" == "0" ]&&echo -e "----------------------------\n\033[32mThese Full_Backup System Files $TARGET_DIR/$YEAR/$MONTH/$DAY/${YEAR}_$A_NAME$FILES Backup SuccessFully !\033[0m" ##也是提示信息
fi
}

sleep 3 ##延时3秒在继续以下动作
Full_Backup;Add_Backup ##调用函数,代码的执行顺序是函数最后执行,先执行前面的两个判断语句再调用函数处理
---------------------------------------------------------------------------------------------------------
以下是本人的测试信息:



最后提示的是增量更新成功,如果要进行完整 更新可以将系统时间修改到星期天,或者修改代码中的[ "$WEEK" -eq "7" ]为你当前系统的时间,再去执行该脚本。



可以看到上图中的备份文件/09/0002_system_backup.tgz周末9号的完整备份,04/update1549_system_backup.tgz周二4号的增量备份

注:以上的脚本可以根据您的实际需要进行更改,实现更多的功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  脚本 shell 自动备份