Linux自动备份脚本

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1541163

       今天网上一个朋友问了我一个shell的题目,让我帮他做下。下面是题目以及解题思路。


题目:

写作一个备份/etc目录的脚本,要求:将/etc目录下的所有文件cp到/var/backups目录下的以当天的日期命名的目录中例如(/var/backups/etc.20140809)。并且判断前一天的目录中的文件与当天的区别,如果无区别,则删除前一天的备份目录。

解答:

[root@nolinux scripts]# cat auto_bak.sh 
#!/bin/bash
#
# This script is used to automatically backup the specified directory, and judgment, and whether the previous backup 
# Written by sunsky
# Mail : 274546888@qq.com
# Date : 2014-8-16 23:00:00
#
bak_from_name="etc"
bak_from_dir="/etc"
bak_to_dir_par="/var/backups"
bak_dir="${bak_to_dir_par}${bak_from_dir}.$(date +%Y%m%d)"
yes_bak_dir="${bak_to_dir_par}${bak_from_dir}.$(date -d '-1 day' +%Y%m%d)"
new_sum_file="${bak_to_dir_par}/new_sum.$bak_from_name.$(date +%Y%m%d)"
old_sum_file="${bak_to_dir_par}/old_sum.$bak_from_name.md5"
 
if [ ! -d $bak_to_dir_par ];then
  mkdir $bak_to_dir_par
fi
find $bak_from_dir |xargs -I {} md5sum {} >> $new_sum_file 2>/dev/null
cp -a $bak_from_dir $bak_dir && echo "$bak_from_dir directory to $bak_dir directory backup successfully"
 
new_sum_error=`md5sum -c $new_sum_file 2>/dev/null|awk '$2!~"OK"'|wc -l`
new_sum_ok=`md5sum -c $new_sum_file 2>/dev/null|awk '$2~"OK"'|wc -l`
old_sum_error=`md5sum -c $old_sum_file 2>/dev/null|awk '$2!~"OK"'|wc -l`
old_sum_ok=`md5sum -c $old_sum_file 2>/dev/null|awk '$2~"OK"'|wc -l`
 
if [ $new_sum_error == $old_sum_error -a $new_sum_ok == $old_sum_ok ];then
  echo "Because today and yesterday's content is the same, delete the backup content of yesterday"
  rm -rf $yes_bak_dir $new_sum_file
fi
echo | cp $new_sum_file $old_sum_file &>/dev/null

针对以上脚本的简单描述:

       本脚本将所有涉及到的目录都声明了变量,这样子就方便脚本功能的灵活收缩。无论是变更所要备份的目录项还是变更备份到的目录项都很另外。由于题目要求不采用打包的方式备份,因此本脚本不涉及对脚本的打包管理。

bak_from_name变量为所要备份的目录名
bak_from_dir变量为所要备份的目录路径
bak_to_dir_par变量为所要备份到的目录的父(上级)目录路径
bak_dir变量为所要备份到的目录路径
yes_bak_dir变量为所要备份目录前一天的备份目录路径
new_sum_file变量为当天所计算出来的所要备份目录的MD5列表
old_sum_file变量为当天所计算出来的所要备份目录的MD5列表(此变量的当天是脚本执行之后的当前,在脚本才开始执行的时候,该变量所指定的文件为前一天备份目录的MD5列表)
new_sum_error变量为当天所要备份目录的MD5发生变化的条目总数
new_sum_ok变量为当天所要备份目录的MD5未发生变化的条目总数
old_sum_error变量为前一天所要备份目录的MD5发生变化的条目总数
old_sum_ok变量为前一天所要备份目录的MD5未发生变化的条目总数

       该脚本前一段主要是搜寻所要备份目录的每一个文件的md5值,然后记录到当天的所要备份目录的MD5列表文件中,然后执行备份。

       该脚本后一段(执行备份之后的部分)主要是根据比对当天的所要备份目录的MD5列表文件和前一天的所要备份目录的MD5列表文件中未变化和变化部分的条目值是否相同,来判断所要备份目录中的文件是否有发生变化,以此来决定是否删除前一天的备份。


OK!本文到此结束,希望能对51博友有所帮助!

转自:http://nolinux.blog.51cto.com/4824967/1541163

原创文章,作者:s19930811,如若转载,请注明出处:http://www.178linux.com/1949

(0)
上一篇 2016-08-15 12:12
下一篇 2016-08-15 12:12

相关推荐

  • 浅述vim操作

    vim是一种比vi更加强大的模式化的全屏文本编辑器。vim在工作过程中有三种模式:编辑模式、插入模式、末行模式。 编辑模式(默认):又称命令模式,其工作内容包括移动光标、剪切、粘贴、删除等 输入模式:亦可称为插入模式,主要是在文件中修改文本内容 末行模式:亦称扩展命令模式,主要是执行vim内置命令的 vim三种模式之间的切换:如下图   (1)编辑…

    Linux干货 2016-08-11
  • CentOS 7 RPM包方式安装LAMP

    细节要求: (1) 三者分离于两台主机; (2) 一个虚拟主机用于提供phpMyAdmin;另一个虚拟主机用于提供wordpress; (3) 提供xcache加速; (4) 为phpMyAdmin提供https虚拟主机; 一、准备CentOS 7主机环境以及Repo仓库提供基于rpm安装包方式的程序包安装源 安装主机程序包规划: 主机1:web-serve…

    Linux干货 2017-02-16
  • 第二周- -问题总结

    前言:这周学习了文件的基本操作、用户和权限管理、重定向和管道。 1.在centos6.9当中,创建虚拟机的时候,网络无法获取地址,ping也不通,出现  device eth0 does not seem to be present, delaying initialization 答:(1).虚拟机启动出错,就把这个虚拟机删除掉重新建立,系统虚拟…

    2017-07-23
  • Shell脚本自动部署(编译)LAMP平台

    Shell脚本自动部署(编译)LAMP平台 Shell脚本自动部署(编译)LAMP平台 为什么要用脚本进行部署? 脚本功能介绍 笔者环境 准备工作 声明 使用测试 脚本代码 Shell脚本自动部署(编译)LAMP平台 LAMP是当下非常流行的一套Web架构,我们可以在GNU/Linux下通过其他人打包的程序包来进行安装; 但是在生产环境中,很多时候都需要我们…

    Linux干货 2016-03-26
  • 系统基础之权限管理作业题

    1.问题:  在/data/testdir里创建的新文件自动属于g1组,组g2的成员如: alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。 [root@wen-7 testdir]# mkdir -p /data/…

    Linux干货 2016-08-04
  • 马哥教育网络班21期+第11周课程练习

    1、详细描述一次加密通讯的过程,结合图示最佳。 首先发送方用单向加密的方法提取数据的特征码,用自己的私钥加密这段特征码,并附加到数据的后面。 发送方用对称加密算法把数据及特征码整个进行加密。 发送方用接收发的公钥加密对称密钥并附加到数据后面。 接收方用私钥解密对称密钥。 接收方用对称密钥解密出数据及加密的特征码。 接收方用发送方的公钥解密特征码,并用相同的算…

    Linux干货 2016-10-09