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.www58058.com/1949

(0)
s19930811s19930811
上一篇 2016-08-15
下一篇 2016-08-15

相關推薦

  • shell腳本編寫-2

    1、條件判斷if語句       1)、 單分支 if  判斷條件;then     條件為真的分支代碼     fi 2)、雙分支     if  判斷條件; then    &…

    Linux干貨 2016-08-15
  • 人志建,則無敵—網絡基本知識加簡單腳本練習

    馬哥21期網絡班-8周博客作業 1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋:網橋就是把2個不同的網段橋接起來;可隔離沖突域。 集線器:集線器就是把多根以太網線或光纖集合連接在同一段物理介質下的裝置;工作在物理層;不能隔離沖突域。 二層交換機:工作于OSI模型的第2層(數據鏈路層),故而稱為二層交換機。二層交換技術的發…

    Linux干貨 2016-08-29
  • 馬哥教育網絡21期+第十二周練習博客中

    4、建立httpd服務器(基于編譯的方式進行),要求:  提供兩個基于名稱的虛擬主機: (a)www1.stuX.com,頁面文件目錄為/web/vhosts/www1;錯誤日志為/var/log/httpd/www1.err,訪問日志為/var/log/httpd/www1.access; (b)www2.stuX.com,頁面文件目錄為/web…

    Linux干貨 2016-10-17
  • 初識linux:計算機的組成及功能

    一、描述計算機的組成及功能。 由馮諾伊曼提出計算機體系結構(5大部件)控制器(Controller):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。運算器(Datapath):運算器的功能是對數據進行各種算術運算和邏輯運算,即對數據進行加工處理。 (cpu由控…

    2017-12-03
  • 第5周

    第5周 1.顯示當前系統上root,fedora或user1用戶的默認shell。 [root@node1 ~]# grep -E “^(root|fedora|user1)\>” /etc/passwd | cut -d: -f 7 /bin/bash /bin/bash /bin/bash [root@node1 ~]# grep “^\(root…

    Linux干貨 2017-07-27
  • ansible之Playbook中tags使用

    示例:httpd.yml– hosts: websrvsremote_user: roottasks:– name: Install httpdyum: name=httpd state=present – name: Install configure filecopy: src=files/httpd.conf des…

    Linux干貨 2018-01-14
欧美性久久久久