linux自动归档,Linux之归档、压缩

一、Linux常用压缩工具:

gzip、bzip、xz,这几个压缩工具不能压缩目录

-------------------------------------------------

gzip、bzip、xz的压缩比:xz>bzip>gzip

压缩比通常有1-9,9个级别,命令不指定压缩级别时,默认使用级别6;压缩比越大则越消耗cpu资源,压缩后的文件也约小,可使用参数,如:-4,指定压缩比级别;

gzip、bzip2、xz压缩包的后缀名:.gz、.bz2、.xz,例如:将文件test压缩后,压缩包名字为test.gz

gzip、bzip2、xz解压缩命令:gunzip = gzip -d、bunzip2 = bzip2 -d、unxz = xz –d

默认情况下,压缩文件后,源文件会被删除,bzip2、xz可以使用参数-k,达到压缩文件并不删除源文件的目的,gzip则可以通过输出重定向:gzip –c file > file.gz来达到目的

如果不解压,查看压缩包文件内容则使用以下命令

*.gz使用:zcat

*.bz2使用:bzcat

*.xz使用:xzcat

-------------------------------------------------

由于不能直接压缩目录,所以我们需要将目录归档(archive)成单个文件后,再进行压缩

二、Linux常用归档命令:

tar命令:

常用参数

-c:创建归档

-x:展开归档

-f filename:指定归档后的文件名称,一般以*.tar作为文件名

-t:不展开归档,查看归档文件列表

-C:指定归档展开后的路径

目录可以先归档成文件后,调用压缩工具进行压缩

-z:调用gzip进行压缩

-j:调用bzip2进行压缩

-J:调用xz进行压缩

--xattrs:归档后保留文件的扩展属性

[root@TESTHOST scripts]# cp -r /etc/init/ ./    #复制init目录到当前目录

[root@TESTHOST scripts]# ls

123  123.xz  init

[root@TESTHOST scripts]# tar -cf test.tar init    #将init目录归档为test.tar

[root@TESTHOST scripts]# ls

123  123.xz  init  test.tar

[root@TESTHOST scripts]# tar -tvf test.tar    #查看归档明细

drwxr-xr-x root/root         0 2015-04-12 02:02 init/

-rw-r--r-- root/root       430 2015-04-12 02:02 init/rcS-emergency.conf

······    #省略

······

[root@TESTHOST scripts]# ls /tmp/

yum.log

- - - - - - - - - - - - - - - - - - -

[root@TESTHOST scripts]# tar -xf test.tar -C /tmp    #指定展开归档到/tmp目录下

[root@TESTHOST scripts]# ls /tmp/

init  yum.log

- - - - - - - - - - - - - - - - - - -

[root@TESTHOST scripts]# tar -Jcf test1.tar.xz init/r*    #归档并压缩

[root@TESTHOST scripts]# ls

123  123.xz  init  test1.tar.xz  test.tar

[root@TESTHOST scripts]# tar -Jxf test1.tar.xz -C /tmp    #解压并展开,此处的J可以省去,tar命令会根据压缩格式自动调用压缩工具进行解压

[root@TESTHOST scripts]# ls /tmp/init/

rc.conf  rcS.conf  rcS-emergency.conf  rcS-sulogin.conf

zip命令:同时归档、压缩,后缀名为.zip,解压缩命令为unzip,unzip -v能在不解压的情况下查看压缩包中文件明细

[root@TESTHOST scripts]# ls

123  123.xz  init

[root@TESTHOST scripts]# zip -r test.zip init   #如果要直接压缩目录,则需要-r进行递归操作,少了-r就目录写为init/*或这init/r*(目录中r开头的文件)

adding: init/ (stored 0%)

adding: init/rcS-emergency.conf (deflated 34%)

adding: init/quit-plymouth.conf (deflated 37%)

adding: init/start-ttys.conf (deflated 33%)

······    #省略

······

[root@TESTHOST scripts]# ls

123  123.xz  init  test.zip

- - - - - - - - - - - - - - - -

[root@TESTHOST scripts]# unzip -v test.zip    #unzip -v 能查在不解压的情况下查看压缩包文件明细

Archive:  test.zip

Length   Method    Size  Cmpr    Date    Time   CRC-32   Name

--------  ------  ------- ---- ---------- ----- --------  ----

0  Stored        0   0% 04-12-2015 02:44 00000000  init/

430  Defl:N      283  34% 04-12-2015 02:44 d32c7c59  init/rcS-emergency.conf

······    #省略

······

--------          -------  ---                            -------

7946             4676  41%                            15 files

[root@TESTHOST scripts]#

三、练习

练习1:写一个脚本,能接受参数gzip、bzip2或xz,而后能将/etc/目录归档备份至/backup目录,并以参数指定的形式压缩存放;文件名称包含脚本执行时刻的时间

脚本1:#!/bin/bash

# Date: 2015-04-11

# Description:

# Version: 1.0

if [ ! -e /backup ];then    #这里可以用[ -d /backup ] || mkdir /backup 替代

mkdir /backup

fi

if [ $1 == gzip ];then

tar czfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.gz /etc/    #加-P的原因看下文

[ $? -eq 0 ] && echo "Backup etc successfully.(gzip)"

elif [ $1 == bzip2 ];then

tar cjfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.bz2 /etc/

[ $? -eq 0 ] && echo "Backup etc successfully.(bzip2)"

elif [ $1 == xz ];then

tar cJfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.xz /etc/

[ $? -eq 0 ] && echo "Backup etc successfully.(xz)"

else

echo "Usage:`basename $0`{gzip | bzip2 | xz }."

exit 5

fi

脚本2#!/bin/bash

# Date: 2015-04-11

# Description:

# Version: 1.0

if [ ! -e /backup ];then    #这里可以用[ -d /backup ] || mkdir /backup 替代

mkdir /backup

fi

Command=$1

if [ -z $1 ]; then    #如果脚本给定的是空值,则默认输入gzip

Command=gzip

fi

if [ $Command == gzip ];then

tar czfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.gz /etc/

[ $? -eq 0 ] && echo "Backup etc successfully.(gzip)"

elif [ $Command == bzip2 ];then

tar cjfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.bz2 /etc/

[ $? -eq 0 ] && echo "Backup etc successfully.(bzip2)"

elif [ $Command == xz ];then

tar cJfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.xz /etc/

[ $? -eq 0 ] && echo "Backup etc successfully.(xz)"

else

echo "Usage:`basename $0`{gzip | bzip2 | xz }."

exit 5

fi

关于-P参数:

因为tar命令打包时使用了绝对路径,没有-P参数时,执行命令时会有警告信息:

tar:Removing leading '/' from member names 或者 tar:从成员名中删除开头的“/”

示例1:

[root@TESTHOST scripts]# tar zvcf init.tar /etc/init/r*

tar: 从成员名中删除开头的“/”    #警告信息

/etc/init/rc.conf

/etc/init/rcS.conf

/etc/init/rcS-emergency.conf

/etc/init/rcS-sulogin.conf

[root@TESTHOST scripts]# tar tvf init.tar

-rw-r--r-- root/root       417 2013-10-10 22:48 etc/init/rc.conf    #可以看到这里的etc前已经没有“/”

-rw-r--r-- root/root      1046 2013-10-10 22:48 etc/init/rcS.conf

-rw-r--r-- root/root       430 2013-10-10 22:48 etc/init/rcS-emergency.conf

-rw-r--r-- root/root       725 2013-10-10 22:48 etc/init/rcS-sulogin.conf

[root@TESTHOST scripts]# tar xvf init.tar    #直接解包

etc/init/rc.conf

etc/init/rcS.conf

etc/init/rcS-emergency.conf

etc/init/rcS-sulogin.conf

[root@TESTHOST scripts]# ls    #归档中所有文件被解压到当前目录,而非其原始位置

123  123.xz  etc  init  init.tar  test.zip  zipbackup.sh

通常是在两台环境相似的机器上进行同步复制的时候,才有需要使用绝对路径进行打包

上述情况我们在解包时可以使用参数并指定目录“-C /”,或者在进行归档或解包时都加上“-P”,

示例2:

[root@TESTHOST scripts]# tar czvfP /scripts/test.tar.gzip /scripts/test/    #无警告

/scripts/test/

/scripts/test/file3

/scripts/test/file1

/scripts/test/file2

[root@TESTHOST scripts]# tar tvfP /scripts/test.tar.gzip

drwxr-xr-x root/root         0 2015-04-12 06:03 /scripts/test/    #此时可以看到归档对象目录名是绝对路径

-rw-r--r-- root/root         0 2015-04-12 06:03 /scripts/test/file3

-rw-r--r-- root/root         0 2015-04-12 06:03 /scripts/test/file1

-rw-r--r-- root/root         0 2015-04-12 06:03 /scripts/test/file2

[root@TESTHOST scripts]# rm -rf test

[root@TESTHOST scripts]# ls

123  123.xz  etc  init  init.tar  test.tar.gzip  zipbackup.sh

[root@TESTHOST scripts]# tar xvfP /scripts/test.tar.gzip

/scripts/test/

/scripts/test/file3

/scripts/test/file1

/scripts/test/file2

[root@TESTHOST scripts]# ls    #两次ls,查看目录文件,确认归档文件解包后,是直接放在源目录下的

123  123.xz  etc  init  init.tar  test  test.tar.gzip  zipbackup.sh

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值