一个简单的linux备份脚本

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
艾徳庄
帖子: 74
注册时间: 2013-02-07 11:36
系统: debian wheezy
送出感谢: 5 次
接收感谢: 2 次

一个简单的linux备份脚本

#1

帖子 艾徳庄 » 2013-02-07 13:43

今天刚注册了论坛,和广大和我一样的新手朋友们分享一个我练习shell编程写的一个脚本,欢迎朋友们测试 :em02
说下这个脚本的使用方法和缺陷:假如脚本名为backup.sh,首先给它添加可执行属性:

代码: 全选

sudo chmod +x backup.sh
。 然后在终端中输入

代码: 全选

sudo ./backup.sh -full
可以进行完整备份,会将根目录下除/proc,/media,/mnt,/lost+found,/sys,/tmp,/run以外的所有文件打包压缩到你存放备份的路径,路径可以通过修改第16行改成你理想中的位置。众所周知,完整备份的时间很久,因此可能一个月备份两次就已经足够了,因此在其他时候可以选择只备份那些新增加的重要文件,在终端中输入

代码: 全选

sudo ./backup.sh -add [List]
可以进行累积备份,只备份那些没有备份过的东西。说说List:当运行完完整备份后,会在备份文件夹下生成一个backup.list文件,在下次进行累计备份的时候,在add后加上backup.list的绝对路径,就可以排除完整备份中已经备份过的东西了。
当系统挂机了之后,若:
1.能进入命令行:使用

代码: 全选

sudo tar -jxpvf backup-xxx.tar.bz2 -C /
还原系统;
2.连命令行都进不了:使用live-usb启动,手动解压备份包,然后逐个copy到系统分区下。(没有live-usb?好吧,我也不知到该怎么办了,嗯,可以借一个^_^)
这个脚本的缺陷是:1,系统中不能出现文件名中含有空格的文件;(不影响脚本运行)2,对于完整备份中备份过的,之后又经过修改但文件名未发生更改的文件,在累积备份时会跳过,以后有机会在完善。
脚本:

代码: 全选

#!/bin/bash
#Program:
#   This script is used to backup the systems;
#   Notice that to run this script correctly you should add extra
#       arguments as other unix commands do:
#   [-full]             #make a full backup;
#   [-add] [List]       #make a incremental backup which will ex
#                            -clude the files in the List.
#Version:
#1.1  -exclude the /sys,/run,/tmp,/sys directory and caches directory.
#History:
#2013/02/05     version1.0
#2013/02/06	by Lodz 
#################################################################
#Here is the varible of backup path that user can modify accordingly.
path_backup=/media/lodz/DWindows/ubackup
#################################################################
[ "$#" -lt 1 ] && echo\
    -e "\n Arguments are necessary,please view the script first"\
    && exit 0
[ ! -d $path_backup ] && echo\
    -e "\n Can't open $path_backup,make sure your backup path is correct"\
    && exit 0
#######################full backup###############################
if [ "$#" == 1 ];then
    if [ "$1" != "-full" ];then
        echo -e "\n Use '-full' to make a full backup"
        exit 0
    else
        rm -f $path_backup/backup*
        tar -jcpvf $path_backup/backup-full-`date +%Y-%m-%d`.tar.bz2\
             --exclude=/proc --exclude=/lost+found --exclude=/media \
             --exclude=/mnt --exclude=/run --exclude=/tmp\
              --exclude=/sys --exclude-caches /\
               > $path_backup/backup.list
#delete the directory including in List file.
        sed -i '/.*\/$/d' $path_backup/backup.list
    fi
#######################incremental backup#########################
elif [ "$#" == 2 ];then
    if [ "$1" == "-add" ];then
        if [ ! -f $2 ];then
            echo -e "\n There must be a file to specify exclusions"
            exit 0
        else
            sed -i '/.*\/$/d' $2
            tar -jcpvf $path_backup/backup-add-`date +%Y-%m-%d`.tar.bz2\
                 --exclude=/media --exclude=/proc --exclude=/lost+found\
                  --exclude=/mnt --exclude=/run --exclude=/tmp\
                  --exclude=/sys --exclude-caches --exclude-from=$2 / \
                   > $path_backup/backup-add-`date +%Y-%m-%d`.list
            cat $path_backup/backup-add-`date +%Y-%m-%d`.list >> $2
            sed -i '/.*\/$/d' $2
        fi
    else
        echo -e "\n Only '-full' and '-add' are supported"
        exit 0
    fi
else
    echo -e "\n Argument list too long"
fi
#####################################################################
头像
枫叶饭团
论坛版主
帖子: 14685
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
送出感谢: 1 次
接收感谢: 132 次
联系:

Re: 一个简单的linux备份脚本

#2

帖子 枫叶饭团 » 2013-02-07 13:57

厉害啊,不过我不喜欢备份。。。
小建议,可以多用function
头像
艾徳庄
帖子: 74
注册时间: 2013-02-07 11:36
系统: debian wheezy
送出感谢: 5 次
接收感谢: 2 次

Re: 一个简单的linux备份脚本

#3

帖子 艾徳庄 » 2013-02-07 14:22

枫叶饭团 写了:厉害啊,不过我不喜欢备份。。。
小建议,可以多用function
其实我也不喜欢备份,以前系统有问题了就用u盘启动盘进入系统copy下/var/cache/apt中的更新包,然后重装系统的。只是最近编译了个openfoam,觉得不备份重装太费时间,于是就开始备份了 :em03
头像
iamfbi
帖子: 1081
注册时间: 2009-02-06 9:18
来自: 小僧乃吐蕃国大雪山大轮寺护国法师座下四大护法之西域妖僧是也
送出感谢: 0
接收感谢: 11 次

Re: 一个简单的linux备份脚本

#4

帖子 iamfbi » 2013-02-07 15:04

先mark后看

Sent from my Ubuntu Phone using Tapatalk 2
Laptop: i5-460m hm55 4g 320g hd5470 14'led 2.3kg (acer 4738g)
Windows XP 7 8 all in one partition.
Ubuntu 10.04 LTS
Mac OS X 10.6.7
折腾笔记
论坛随手记
头像
YeLee
论坛版主
帖子: 26408
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
送出感谢: 25 次
接收感谢: 307 次
联系:

Re: 一个简单的linux备份脚本

#5

帖子 YeLee » 2013-02-07 18:23

厉害,支持一个。 :em11
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
艾徳庄
帖子: 74
注册时间: 2013-02-07 11:36
系统: debian wheezy
送出感谢: 5 次
接收感谢: 2 次

Re: 一个简单的linux备份脚本

#6

帖子 艾徳庄 » 2013-02-07 22:08

YeLee 写了:厉害,支持一个。 :em11
谢谢,说的我怪不好意思的,其实很简单,只用到了正规表达式,if语句,tar和sed,目前仍处于菜鸟级别,献丑了
头像
NewUserFF
帖子: 413
注册时间: 2010-11-19 22:55
送出感谢: 10 次
接收感谢: 1 次

Re: 一个简单的linux备份脚本

#7

帖子 NewUserFF » 2013-02-08 17:36

一直用rsync备份,另外说句题外话,如果有几十个G的免费网盘给我备份一下整个系统就好了 :em06
头像
442449076
帖子: 387
注册时间: 2009-07-01 16:34
送出感谢: 2 次
接收感谢: 8 次

Re: 一个简单的linux备份脚本

#8

帖子 442449076 » 2013-02-08 17:42

现在也不备份了,有网络不怎么担心这个问题
头像
艾徳庄
帖子: 74
注册时间: 2013-02-07 11:36
系统: debian wheezy
送出感谢: 5 次
接收感谢: 2 次

Re: 一个简单的linux备份脚本

#9

帖子 艾徳庄 » 2013-02-08 20:43

NewUserFF 写了:一直用rsync备份,另外说句题外话,如果有几十个G的免费网盘给我备份一下整个系统就好了 :em06
几十个G?还免费?我也想要一个 :em04
头像
艾徳庄
帖子: 74
注册时间: 2013-02-07 11:36
系统: debian wheezy
送出感谢: 5 次
接收感谢: 2 次

Re: 一个简单的linux备份脚本

#10

帖子 艾徳庄 » 2013-02-08 20:46

442449076 写了:现在也不备份了,有网络不怎么担心这个问题
是啊,尤其是校园网ipv6,下载个镜像10分钟都不到
头像
NewUserFF
帖子: 413
注册时间: 2010-11-19 22:55
送出感谢: 10 次
接收感谢: 1 次

Re: 一个简单的linux备份脚本

#11

帖子 NewUserFF » 2013-02-08 22:02

艾徳庄 写了:
NewUserFF 写了:一直用rsync备份,另外说句题外话,如果有几十个G的免费网盘给我备份一下整个系统就好了 :em06
几十个G?还免费?我也想要一个 :em04
其实还是有的,百度网盘搞活动的时候就送了100G,我还领了,但是至今没怎么用,一是没linux版,只能用网页端,再就是对国内的网盘很不放心
头像
shinery
帖子: 1376
注册时间: 2009-07-22 22:23
送出感谢: 2 次
接收感谢: 4 次

Re: 一个简单的linux备份脚本

#12

帖子 shinery » 2013-02-08 22:14

我喜欢用用rsync备份到移动硬盘。
愿扣上你双手,至繁华浪处到沙丘。
头像
k9288k
帖子: 751
注册时间: 2012-02-21 22:27
系统: Ubuntu12.04
送出感谢: 42 次
接收感谢: 1 次

一个简单的linux备份脚本

#13

帖子 k9288k » 2013-02-09 9:45

学习一下
回复

回到 “Shell脚本”