不管你负责的是商业环境还是家用的,丢失数据是不允许的,为了防止这种事情,那么要做的就是备份。这个时候制作一个存储文件的备份计划绝对不是简单的事情。
归档数据文件
你将linux系统作为一个重要的平台,可以创建一个shell脚本来自动获取特定目录的快照。在配置文件中指定所涉及的目录。
在Linux系统中,归档数据的主要工具是tar命令,tar命令可以将整个目录归档到单个文件中,下面的例子中是通过tar命令来创建工作目录归档文件。
tar -cf archive.tar /home/sap/projects/.
ls -l archive.tar
由于tar归档文件会消耗大量的磁盘空间,最好能够压缩一下该文件,这只需要加一个-z选项就行了。它会将tar归档文件压缩成。gzip格式的tar文件,这种文件也叫做tarball.然后用正确的扩展名来表示,用。tar.gz或者.tgz都行。下面的例子创建了项目目录tarball
tar -zcf archive.tar.gz /home/sap/projects
ls -l archive.tar.gz
现在你已经完成了归档脚本的主要部分。
你不需要为待备份的新目录或者文件修改或者编写新的归档脚本,而是可以借助于配置文件。配置文件应该包括你希望进行归档的每个目录文件。
cat Files_to_Backup
/home/dap/projects
/home/sap/downloads
/home/does_not_exist
/home/sap/documents
可以让脚本读取配置文件,然后将每个目录加到归档列表中,要实现这一点,只需要实现read命令。来读取这一条记录就好了。不过 不用像之前那样,。通过管道将cat命令输出传给while循环,在这个脚本中我们使用exec命令来重定向标准输入(STDIN)。用法如下:
exec <
C
O
N
F
I
G
F
I
L
E
r
e
a
d
F
I
L
E
N
A
M
E
注意,我们为归档配置文件使用了一个变量,
C
O
N
F
I
G
F
I
L
E
。配置文件中每一条记录都会被读入。只要
r
e
a
d
命令在配置文件中发现还有记录可读,它就在变量中返回一个表示成功的退出状态
0.
可以将它作为
w
h
i
l
e
循环的测试条件来读取配置文件中所有记录。
w
h
i
l
e
[
CONFIG_FILE read FILE_NAME 注意,我们为归档配置文件使用了一个变量,CONFIG_FILE。配置文件中每一条记录都会被读入。只要read 命令在配置文件中发现还有记录可读,它就在变量中返回一个表示成功的退出状态0.可以将它作为while循环的测试条件来读取配置文件中所有记录。 while [
CONFIGFILEreadFILENAME注意,我们为归档配置文件使用了一个变量,CONFIGFILE。配置文件中每一条记录都会被读入。只要read命令在配置文件中发现还有记录可读,它就在变量中返回一个表示成功的退出状态0.可以将它作为while循环的测试条件来读取配置文件中所有记录。while[? -eq 0]
do
[…]
read FILE_NAME
done
一旦read命令到了配置文件的末尾,就会返回一个非零状态码。这时脚本会退出while循环。
在while循环中,我们需要做两件事,首先,必须将目录名加到归档列表中,更重要的是要检查那个目录是否存在!很可能你从文件系统中删除一个目录却忘却了更新归档配置文件。
可以用简单的IF语句来检查目录是否存在与否。如果木存在,它会被加入要归档目录列表FILE_LIST中,否则就显示一条警告信息。if 语句如下。
if [-f $FILE_NAME -o -d $FILE_NAME]
then
if file exists,add its name to the list.
FILE_LIST=“$FILE_LIST KaTeX parse error: Expected 'EOF', got '#' at position 19: …E_NAME" ELSE #̲IF FILE DOOESN'…FILE_NAME,does not exist.”
echo"Obviously ,I will not include it in this archive."
echo"It is listed on line
F
I
L
E
N
O
o
f
t
h
e
c
o
n
f
i
g
f
i
l
e
.
"
e
c
h
o
"
C
o
n
t
i
n
u
i
n
g
t
o
b
u
i
l
d
a
r
c
h
i
v
e
l
i
s
t
.
.
.
"
e
c
h
o
f
i
F
I
L
E
N
O
=
FILE_NO of the config file." echo"Continuing to build archive list..." echo fi FILE_NO=
FILENOoftheconfigfile."echo"Continuingtobuildarchivelist..."echofiFILENO=[$FILE_NO +1] #INCREASE LINE/FILE NUMBER BY ONE.