格式:tar 选项 文件目录列表 功能:对文件目录进行打包备份 选项:
-c 建立新的归档文件 -r 向归档文件末尾追加文件 -x 从归档文件中解出文件 -O 将文件解开到标准输出 -v 处理过程中输出相关信息 -f 对普通文件操作 -z 调用gzip来压缩归档文件,与-x联用时调用gzip完成解压缩 -Z 调用compress来压缩归档文件,与-x联用时调用compress完成解压缩
例如:
- 将当前目录下所有.txt文件打包并压缩归档到文件this.tar.gz,我们可以使用 tar czvf this.tar.gz ./*.txt
- 将当前目录下的this.tar.gz中的文件解压到当前目录我们可以使用 tar xzvf this.tar.gz ./
- 增量备份(使用-g参数)使用 tar -g 参数进行增量备份实验
完整备份:
//建立测试路径与档案 mkdir test touch test/{a,b,c}; 在test下生成三个文件 //执行完整备份 tar -g snapshot -zcf backupfull.tar.gz test //查看 tarball 内容 tar ztf backupfull.tar.gz test/ test/a test/b test/c 增量备份: //新增一个档案 touch test/d //执行第一次的增量备份 (注意 tarball 档名) tar -g snapshot -zcf backupincremental1.tar.gz test //查看 tarball 内容 tar ztf backupincremental1.tar.gz test/ test/d //新增一个档案, 并异动一个档案内容 touch test/e echo 123 > test/a //执行第二次的增量备份 (注意 tarball 档名) tar -g snapshot -zcf backupincremental2.tar.gz test //查看 tarball 内容 tar ztf backupincremental2.tar.gz test/ test/a test/e 还原备份资料: //清空测试资料 rm -rf test //开始进行资料还原 tar zxf backupfull.tar.gz tar zxf backupincremental1.tar.gz tar zxf backupincremental_2.tar.gz //查看测试资料 ls test a b c d e - 增量备份(使用-u参数)
使用 tar -u 参数进行增量备份
第一次备份: //建立测试路径与档案 mkdir test touch test/a test/b test/c //备份资料 tar zcf backup.tar.gz test //查看 tarball 内容 tar ztf backup.tar.gz test/ test/a test/b test/c
增量备份:
//新增一个档案, 并异动一个档案内容 touch test/d echo 123 > test/a
//执行增量备份 (-u 参数只能执行於未压缩的 tarball) gunzip backup.tar.gz tar uf backup.tar test gzip backup.tar
//查看 tarball 内容 tar ztf backup.tar.gz test/ test/a test/b test/c test/ test/a test/d
//还原备份资料:
//清除测试资料 rm -rf test
//解包 tarball tar zxf backup.tar.gz
//查看测试资料 ls test a b c d
脚本1(http://blog.lihaixin.com/2010/08/tar-command.html)
#!/bin/bash
# define
dayofweek=`date "+%u"`
today=`date "+%Y%m%d"`
source=/data/
backup=/backup/
# action
cd $backup
if [ $dayofweek -eq 1 ]; then
if [ ! -f "full$today.tar.gz" ]; then
rm -rf snapshot
tar -g snapshot -zcf "full$today.tar.gz" $source
fi
else
if [ ! -f "inc$today.tar.gz" ]; then
tar -g snapshot -zcf "inc$today.tar.gz" $source
fi
fi
脚本二(http://www.futuremedia.pl/pub/projekty/backup/backup)
#!/bin/bash
# simple backup script. intended to run daily from crontab
# called "biedacula" after "bieda", which is Polish word for "poor".
# implements poor man's GFS scheme, hence the name:)
# requires GNU tar, GNU gzip and ncftp
# these files must contain file/dir paths (one a line)
PATHFILE=/etc/backup-defs
SKIPFILE=/etc/backup-excludes
# this is a snapshot file auto-created by GNU tar
SNAPSHOT=/etc/backup-snapshot
# FTP host to send backups ( must allow anonymous RW access for me )
FTPHOST=192.168.2.2
FTPPORT=21
# when to do full, monthly/weekly backups
FULL_MONTHDAY=1 # 1st day of month
FULL_WEEKDAY=7 # Sunday
# how many "tapes" for monthly backups
KEEP_MONTHLY=3
# how many "tapes" for weekly backups
KEEP_WEEKLY=4
# in total you will have ( KEEP_MONTHLY + KEEP_WEEKLY + 6 ) "tapes"
function biedump {
local TYPE=$1
local LABEL=$2
local start=`date +%Y%m%d%H%M`
echo "$start: Starting $TYPE dump to label $LABEL"
if [ "x$TYPE" == "xfull" ] ; then
rm -rf $SNAPSHOT
fi
tar -c -T$PATHFILE -X$SKIPFILE -g$SNAPSHOT -P -f - \
| gzip \
| ncftpput -c -S.tmp -P $FTPPORT $FTPHOST $LABEL
local res=$?
local end=`date +%Y%m%d%H%M`
if [ $res -eq 0 ]; then
echo "$end: $TYPE dump OK."
else
echo "$end: $TYPE dump FAILED with exit code $res."
fi
}
host=`hostname -f`
yyyy=`date +%Y`
mm=`date +%m`
dd=`date +%d`
ww=`date +%V`
day_of_week=`date +%u`
dayofweek=`date +%a`
echo "Hello. This is biedacula backup running at $host."
echo "Today is $yyyy/$mm/$dd, day $day_of_week ($dayofweek) of week $ww."
if [ $dd -eq $FULL_MONTHDAY ]; then
let " n = ( mm % $KEEP_MONTHLY ) + 1 "
biedump 'full' "$host-M-$n.tgz"
elif [ $day_of_week -eq $FULL_WEEKDAY ] ; then
let " n = ( ww % $KEEP_WEEKLY ) + 1 "
biedump 'full' "$host-W-$n.tgz"
else
biedump 'incr' "$host-D-$dayofweek.tgz"
fi
更多信息: --help 参数得到常用使用方法