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 ##调用函数,代码的执行顺序是函数最后执行,先执行前面的两个判断语句再调用函数处理
---------------------------------------------------------------------------------------------------------
以下是本人的测试信息:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/01/57804774774cceabd9c64707e15b0ff6.png)
最后提示的是增量更新成功,如果要进行完整 更新可以将系统时间修改到星期天,或者修改代码中的[ "$WEEK" -eq "7" ]为你当前系统的时间,再去执行该脚本。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/01/58664116753bdd2253eece390899acf2.png)
可以看到上图中的备份文件/09/0002_system_backup.tgz周末9号的完整备份,04/update1549_system_backup.tgz周二4号的增量备份
注:以上的脚本可以根据您的实际需要进行更改,实现更多的功能。
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 ##调用函数,代码的执行顺序是函数最后执行,先执行前面的两个判断语句再调用函数处理
---------------------------------------------------------------------------------------------------------
以下是本人的测试信息:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/01/57804774774cceabd9c64707e15b0ff6.png)
最后提示的是增量更新成功,如果要进行完整 更新可以将系统时间修改到星期天,或者修改代码中的[ "$WEEK" -eq "7" ]为你当前系统的时间,再去执行该脚本。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/01/58664116753bdd2253eece390899acf2.png)
可以看到上图中的备份文件/09/0002_system_backup.tgz周末9号的完整备份,04/update1549_system_backup.tgz周二4号的增量备份
注:以上的脚本可以根据您的实际需要进行更改,实现更多的功能。
相关文章推荐
- Linux系统关键文件备份shell脚本
- 以Android L读取系统所有logcat并写入文件为例分析Android 以添加系统进程的方式申请selinux的权限执行shell脚本,以及avc:dined应该怎么申请权限
- 3个备份系统文件并邮件发送的Shell脚本分享
- Linux系统命令及Shell脚本学习笔记四:Linux文件系统
- Shell告警系统(需求分析,告警系统主脚本,告警系统配置文件,告警系统监控项目)
- 3个备份系统文件并邮件发送的Shell脚本分享
- Git学习-->如何通过Shell脚本自动定时将Gitlab备份文件复制到远程服务器?
- unity3D 5 学习 脚本文件拖拽进对象报错原因分析
- shell script 学习之 bash设定文件分析
- shell学习四十六天----文件系统的空间信息df和du命令
- 【Shell脚本学习25】Shell文件包含
- shell 文件备份脚本
- Linux系统中运行.sh(Shell脚本)文件
- Linux查看磁盘信息(编写shell脚本来分析文件的占用情况)
- 备份远程服务器文件简单shell脚本
- shell 脚本完成对日志文件的提取之awk 学习
- linux运用shell脚本统计列出目录文件个数(学习笔记)
- Linux系统命令及Shell脚本学习笔记三:文件管理