备份和恢复的技能在操作系统的管理中应用相当广泛。
这部分内容主要通过tar命令配合cron、date命令及其它的一些技巧来实现自动化备份和恢复。
tar命令的一些帮助信息:
NAME
tar - The GNU version of the tar archiving utility
SYNOPSIS
tar <operation> [options]
Operations:
[-]A --catenate --concatenate
[-]c --create
[-]d --diff --compare
[-]r --append
[-]t --list
[-]u --update
[-]x --extract --get
--delete
Common Options:
-C, --directory DIR
-f, --file F
-j, --bzip2
-p, --preserve-permissions
-v, --verbose
-z, --gzip
注意tar有些特殊,甚至于支持没-的参数。但我个人不提倡。脚本是用来应用,应该是易于理解的。
我们平时经常用的参数有:
tar xzvf 解压一个*.tar.gz文件
tar xjvf 解压一个*.tar.bz2的文件
tar czvf 压缩成一个*.tar.gz的文件
tar xjvf 压缩成一个*.tar.bz2的文件
如果去掉v,就不显示详细信息,实际在脚本中,如果不需要交互或隐藏执行过程的话,不要加好了。
我们还可以通过-C的参数来指定解压的目录。
下面参数之一必须使用:
c
x
z 是gzip的压缩格式,压缩后文件后缀为gz;
j 是bzip2的压缩格式,压缩后文件后缀为bz2。
A 是添加压缩包到已经存在的一个压缩包中。
u 指比较压缩包中的文件和当前文件,如果比压缩包的更新,就替换掉。
r 添加文件或文件夹到一个已经存在的压缩包中。
-t这是显示压缩文件文件列表。
-d 比较压缩包中的文件与文件系统中的文件的差异。
--delete 从压缩包中删除文件或文件夹。
如果在脚本中,我们为了更容易识别不同时创建的文件,我们可以用日期给压缩包命名。
这里我们可以看一个示例:
#!/bin/sh
cd /home/admin/backup
year=`date +%Y`
month=`date +%m`
day=`date +%d`
now=$year-$month-$day
mkdir backup_$now
tar zcvf backup_$now/backup.tar.gz /home/html
关于如何通过date来显示当前的时间,请查阅详细的date man 手册,但要注意一些重点参数,需要识记。
同时我们还可以通过脚本来实现周一全备,以后每天一次增量备份,周日提醒光盘备份,当然所有这些都需要脚本和计划任务cron的参与,关于cron请查看相关的帮助。
FORMAT controls the output. The only valid option for the second form specifies Coordinated
Universal Time. Interpreted sequences are:
%% a literal %
%a locale’s abbreviated weekday name (e.g., Sun)
%A locale’s full weekday name (e.g., Sunday)
%b locale’s abbreviated month name (e.g., Jan)
%B locale’s full month name (e.g., January)
%c locale’s date and time (e.g., Thu Mar 3 23:05:25 2005)
%C century; like %Y, except omit last two digits (e.g., 21)
%d day of month (e.g, 01)
%D date; same as %m/%d/%y
%e day of month, space padded; same as %_d
%F full date; same as %Y-%m-%d
%g last two digits of year of ISO week number (see %G)
%G year of ISO week number (see %V); normally useful only with %V
%h same as %b
%H hour (00..23)
%I hour (01..12)
%j day of year (001..366)
%k hour ( 0..23)
%l hour ( 1..12)
%m month (01..12)
%M minute (00..59)
%n a newline
%N nanoseconds (000000000..999999999)
%p locale’s equivalent of either AM or PM; blank if not known
%P like %p, but lower case
%r locale’s 12-hour clock time (e.g., 11:11:04 PM)
%R 24-hour hour and minute; same as %H:%M
%s seconds since 1970-01-01 00:00:00 UTC
%S second (00..60)
%t a tab
%T time; same as %H:%M:%S
%u day of week (1..7); 1 is Monday
%U week number of year, with Sunday as first day of week (00..53)
%V ISO week number, with Monday as first day of week (01..53)
%w day of week (0..6); 0 is Sunday
%W week number of year, with Monday as first day of week (00..53)
%x locale’s date representation (e.g., 12/31/99)
%X locale’s time representation (e.g., 23:13:48)
%y last two digits of year (00..99)
%Y year
%z +hhmm numeric timezone (e.g., -0400)
%:z +hh:mm numeric timezone (e.g., -04:00)
%::z +hh:mm:ss numeric time zone (e.g., -04:00:00)
%:::z numeric time zone with : to necessary precision (e.g., -04, +05:30)
%Z alphabetic time zone abbreviation (e.g., EDT)
By default, date pads numeric fields with zeroes. The following optional flags may follow ‘%’:
- (hyphen) do not pad the field _ (underscore) pad with spaces 0 (zero) pad with zeros ^
use upper case if possible # use opposite case if possible
After any flags comes an optional field width, as a decimal number; then an optional modifier,
which is either E to use the locale’s alternate representations if available, or O to use the
locale’s alternate numeric symbols if available.
我们也可以通过tar实现增量备份,这个就需要我们查看tar的官方文档。
-g, --listed-incremental F
create/list/extract new GNU-format incremental backup
-G, --incremental
create/list/extract old GNU-format incremental backup
如何跟踪软链接
-h, --dereference
don’t dump symlinks; dump the files they point to
保持原来的文件结构
-l, --one-file-system
stay in local file system when creating an archive
ALL OPTIONS
--atime-preserve
don’t change access times on dumped files
-b, --blocking-factor N
block size of Nx512 bytes (default N=20)
-B, --read-full-blocks
reblock as we read (for reading 4.2BSD pipes)
--backup BACKUP-TYPE
backup files instead of deleting them using BACKUP-TYPE simple or numbered
--block-compress
block the output of compression program for tapes
-C, --directory DIR
change to directory DIR
--check-links
warn if number of hard links to the file on the filesystem mismatch the number of links
recorded in the archive
--checkpoint
print directory names while reading the archive
-f, --file [HOSTNAME:]F
use archive file or device F (default "-", meaning stdin/stdout)
-F, --info-script F --new-volume-script F
run script at end of each tape (implies --multi-volume)
--force-local
archive file is local even if has a colon
--format FORMAT
selects output archive format
v7 - Unix V7
oldgnu - GNU tar <=1.12
gnu - GNU tar 1.13
ustar - POSIX.1-1988
posix - POSIX.1-2001
-g, --listed-incremental F
create/list/extract new GNU-format incremental backup
-G, --incremental
create/list/extract old GNU-format incremental backup
-h, --dereference
don’t dump symlinks; dump the files they point to
--help like this manpage, but not as cool
-i, --ignore-zeros
ignore blocks of zeros in archive (normally mean EOF)
--ignore-case
ignore case when excluding files
--ignore-failed-read
don’t exit with non-zero status on unreadable files
--index-file FILE
send verbose output to FILE instead of stdout
-j, --bzip2
filter archive through bzip2, use to decompress .bz2 files
-k, --keep-old-files
keep existing files; don’t overwrite them from archive
-K, --starting-file F
begin at file F in the archive
--keep-newer-files
do not overwrite files which are newer than the archive
-l, --one-file-system
stay in local file system when creating an archive
-L, --tape-length N
change tapes after writing N*1024 bytes
-m, --touch, --modification-time
don’t extract file modified time
-M, --multi-volume
create/list/extract multi-volume archive
--mode PERMISSIONS
apply PERMISSIONS while adding files (see chmod(1))
-N, --after-date DATE, --newer DATE
only store files newer than DATE
--newer-mtime DATE
like --newer, but with a DATE
--no-anchored
match any subsequenceof the name’s components with --exclude
--no-ignore-case
use case-sensitive matching with --exclude
--no-recursion
don’t recurse into directories
--no-same-permissions
apply user’s umask when extracting files instead of recorded permissions
--no-wildcards
don’t use wildcards with --exclude
--no-wildcards-match-slash
wildcards do not match slashes (/) with --exclude
--null --files-from reads null-terminated names, disable --directory
--numeric-owner
always use numbers for user/group names
-o, --old-archive, --portability
like --format=v7; -o exhibits this behavior when creating an archive (deprecated behav-
ior)
-o, --no-same-owner
do not attempt to restore ownership when extracting; -o exhibits this behavior when
extracting an archive
-O, --to-stdout
extract files to standard output
--occurrence NUM
process only NUM occurrences of each named file; used with --delete, --diff, --extract,
or --list
--overwrite
overwrite existing files and directory metadata when extracting
--overwrite-dir
overwrite directory metadata when extracting
--owner USER
change owner of extraced files to USER
-p, --same-permissions, --preserve-permissions
extract all protection information
-P, --absolute-names
don’t strip leading ‘/’s from file names
--pax-option KEYWORD-LIST
used only with POSIX.1-2001 archives to modify the way tar handles extended header key-
words
--posix
like --format=posix
--preserve
like --preserve-permissions --same-order
--acls this option causes tar to store each file’s ACLs in the archive.
--selinux
this option causes tar to store each file’s SELinux security context information in the
archive.
--xattrs
this option causes tar to store each file’s extended attributes in the archive. This
option also enables --acls and--selinux if they haven’t been set already, due to the
fact that the data for those are stored in special xattrs.
--no-acls
This option causes tar not to store each file’s ACLs in the archive and not to extract
any ACL information in an archive.
--no-selinux
this option causes tar not to store each file’s SELinux security context information in
the archive and not to extract any SELinux information in an archive.
--no-xattrs
this option causes tar not to store each file’s extended attributes in the archive and
not to extract any extended attributes in an archive. This option also enables --no-acls
and --no-selinux if they haven’t been set already.
-R, --record-number
show record number within archive with each message
--record-size SIZE
use SIZE bytes per record when accessing archives
--recursion
recurse into directories
--recursive-unlink
remove existing directories before extracting directories of the same name
--remove-files
remove files after adding them to the archive
--rmt-command CMD
use CMD instead of the default /usr/sbin/rmt
--rsh-command CMD
use remote CMD instead of rsh(1)
-s, --same-order, --preserve-order
list of names to extract is sorted to match archive
-S, --sparse
handle sparse files efficiently
--same-owner
create extracted files with the same ownership
--show-defaults
display the default options used by tar
--show-omitted-dirs
print directories tar skips while operating on an archive
--strip-components NUMBER, --strip-path NUMBER
strip NUMBER of leading components from file names before extraction
(1) tar-1.14 uses --strip-path, tar-1.14.90+ uses --strip-components
--suffix SUFFIX
use SUFFIX instead of default ’~’ when backing up files
-T, --files-from F
get names to extract or create from file F
--totals
print total bytes written with --create
-U, --unlink-first
remove existing files before extracting files of the same name
--use-compress-program PROG
access the archive through PROG which is generally a compression program
--utc display file modification dates in UTC
-v, --verbose
verbosely list files processed
-V, --label NAME
create archive with volume name NAME
--version
print tar program version number
--volno-file F
keep track of which volume of a multi-volume archive its working in FILE; used with
--multi-volume
-w, --interactive, --confirmation
ask for confirmation for every action
-W, --verify
attempt to verify the archive after writing it
--wildcards
use wildcards with --exclude
--wildcards-match-slash
wildcards match slashes (/) with --exclude
--exclude PATTERN
exclude files based upon PATTERN
-X, --exclude-from FILE
exclude files listed in FILE
-Z, --compress, --uncompress
filter the archive through compress
-z, --gzip, --gunzip, --ungzip
filter the archive through gzip
--use-compress-program PROG
filter the archive through PROG (which must accept -d)
-[0-7][lmh]
specify drive and density