RHCE8学习指南 第6章 归档与压缩

6.1 归档

为了方便文件在网络上传输,我们需要把多个文件打包成一个文件(归档)。常见的归档命令包括tar和cpio,我们这里讲tar的使用,cpio请大家自行学习。
tar的语法如下。

tar cvf  aa.tar  file1 file2 file3 
c的意思是创建归档
v的意思是创建归档时显示被归档的文件,为了简化输出可以不加v选项
f用于指定归档文件

这句话的意思是把file1 、file2、file3归档到 aa.tar中。
归档文件一般使用后缀tar。
先做准备,拷贝几个文件到当前目录,命令如下。

[root@server ~]# cp /etc/hosts /etc/passwd /etc/services .
[root@server ~]# ls
anaconda-ks.cfg  hosts  initial-setup-ks.cfg  passwd  services
[root@server ~]#

然后把hosts, passwd, services三个文件归档成一个文件 aa.tar,命令如下。

[root@server ~]# tar cf aa.tar hosts passwd services 
[root@server ~]# ls
aa.tar  anaconda-ks.cfg  hosts  initial-setup-ks.cfg  passwd  services
[root@server ~]#

这里归档文件是aa.tar,查看他们大小,命令如下。

[root@server ~]# ls -lh passwd services hosts aa.tar 
-rw-r--r--. 1 root root 690K 8月  10 23:33 aa.tar
-rw-r--r--. 1 root root  158 8月  10 23:32 hosts
-rw-r--r--. 1 root root 2.6K 8月  10 23:32 passwd
-rw-r--r--. 1 root root 677K 8月  10 23:32 services
[root@server ~]#

可以看到,aa.tar文件的大小比三个文件大小的总和还大,说明用tar只有归档功能,并没有压缩功能。
从上面的操作可以看出当创建好归档文件后,源文件还是在的,即把hosts、passwd、services归档到aa.tar中之后,这三个文件依然存在。如果希望归档之后同时删除源文件,可以加上--remove-files选项。
删除aa.tar,然后再次归档,命令如下。

[root@server ~]# rm -rf aa.tar 
[root@server ~]# tar cf aa.tar hosts passwd services --remove-files 
[root@server ~]# ls
aa.tar  anaconda-ks.cfg  initial-setup-ks.cfg
[root@server ~]#

这里可以看到,三个文件归档到aa.tar之后就被删除了。
查看归档文件中有哪些文件,可以使用t选项,命令如下。

[root@server ~]# tar tf aa.tar 
hosts
passwd
services
[root@server ~]#

想在归档文件中追加一个文件用r选项,命令如下。

[root@server ~]# tar rf aa.tar anaconda-ks.cfg 
[root@server ~]# tar tf aa.tar 
hosts
passwd
services
anaconda-ks.cfg
[root@server ~]#

这里把已经把anaconda-ks.cfg写入aa.tar中了。
对归档文件进行解档,解档的语法如下。

tar xvf aa.tar
    这里x 表示解档
    v显示解档出来的文件,为了简化输出,v选项可以不写
    f用于指定归档文件

练习:把aa.tar解档,命令如下。

[root@server ~]# tar xf aa.tar 
[root@server ~]# ls
aa.tar  anaconda-ks.cfg  hosts  initial-setup-ks.cfg  passwd  services
[root@server ~]#

可以看到,解档时默认为解档到当前目录,如果要解档到指定的目录需要加上-C 指定目录,现在要把aa.tar解档到/opt目录中,命令如下。

[root@server ~]# ls /opt/
[root@server ~]# tar xf aa.tar -C /opt
[root@server ~]# ls /opt
anaconda-ks.cfg  hosts  passwd  services
[root@server ~]#

然后清空/opt中的内容,命令如下。

[root@server ~]# rm -rf /opt/*
[root@server ~]# ls /opt
[root@server ~]#

当然也可以只解档aa.tar中某一个文件,只要在正常解档命令后面加上要解档的文件即可。
把aa.tar中的hosts解档出来放在/opt中,命令如下。

[root@server ~]# ls /opt
[root@server ~]# 
[root@server ~]# tar xf aa.tar  -C /opt hosts
[root@server ~]# ls /opt
hosts
[root@server ~]#

需要注意的是,这里hosts要写在-C /opt的后面。

6.2 压缩

前面讲tar只是归档,并没有压缩功能。要是想压缩有专门的工具,包括gzip、bzip2、zip。
先创建一个测试文件,命令如下。

[root@server ~]# dd if=/dev/zero of=file bs=1M count=100
记录了100+0 的读入
记录了100+0 的写出
104857600 bytes (105 MB, 100 MiB) copied, 0.281021 s, 373 MB/s
[root@server ~]#

(1)if是读取哪里的内容,这里是/dev/zero。
(2)of是组成的文件名。
(3)count指定zero的数目。
(4)bs指定每个zero的大小,如果没指定单位则默认为B。
这里意思是拿100个大小为1M的/dev/zero组成一个名称叫file的文件,此file的大小应该是100M。

[root@server ~]# ls -lh file
-rw-r--r--. 1 root root 100M 8月  10 23:48 file
[root@server ~]#

6.2.1 gzip的用法

gzip的用法如下。

压缩:gzip  file ,压缩出来的文件后缀为gz
解压:gzip  -d file.gz

使用gzip对file进行压缩,命令如下。

[root@server ~]# ls -lh file.gz 
-rw-r--r--. 1 root root 100K 8月  10 23:48 file.gz
[root@server ~]#

可以看到,file原来100M,压缩成file.gz的大小只有100K,当然因为file文件过于简单所以压缩率是非常高的。
用gzip把file.gz解压,命令如下。

[root@server ~]# gzip -d file.gz 
[root@server ~]#

一般情况下,tar和gzip结合一起使用,用法如下。

tar zcf aa.tar.gz  file1 file2 file3

在tar选项中加z表示调用gzip,z和c一起用就表示压缩,后缀一般为tar.gz。这句话的意思就是把file1、file2、file3归档并压缩到aa.tar.gz中。
练习:把file归档压缩到aa.tar.gz中,命令如下。

[root@server ~]# tar zcf aa.tar.gz file
[root@server ~]# 
[root@server ~]# ls -lh aa.tar.gz file
-rw-r--r--. 1 root root 100M 8月  10 23:48 file
-rw-r--r--. 1 root root 100K 8月  11 00:22 aa.tar.gz
[root@server ~]#

解压tar.gz格式的文件用tar zxf aa.tar.gz。
这里z表示调用gzip,与x一起使用就表示解压。

[root@server ~]# rm -rf file
[root@server ~]# tar zxf aa.tar.gz 
[root@server ~]#

6.2.2 bzip2的用法

bzip2也是常用的压缩工具,用法如下。

压缩: bzip2  file ,压缩出来的文件后缀为bz2
解压:   bzip2 -d file.bz2

使用bzip2对file进行压缩,命令如下。

[root@server ~]# bzip2 file
[root@server ~]# ls -lh file.bz2 
-rw-r--r--. 1 root root 113 8月  10 23:48 file.bz2
[root@server ~]# 

这里把100M的file压缩不到1K,当然file的结构太简单所以压缩率很高。
使用bzip2进行解压,命令如下。

[root@server ~]# bzip2 -d file.bz2 
[root@server ~]# 

一般情况下,tar和bzip2结合一起使用,用法如下。

 tar jcf aa.tar.bz2  file1 file2 file3

在tar选项中加j表示调用bzip2,j和c一起用就表示压缩,后缀一般为tar.bz2。这句话的意思就是把file1、file2、file3归档并压缩到aa.tar.bz2中。

[root@server ~]# tar jcf aa.tar.bz2  file
[root@server ~]# ls -lh aa.tar.bz2 
-rw-r--r--. 1 root root 194 8月  11 10:17 aa.tar.bz2
[root@server ~]#

解压tar.bz2格式的文件用tar jxf aa.tar.bz2。
这里j表示调用bzip2,和x一起使用就表示解压。

[root@server ~]# rm -rf file
[root@server ~]# tar jxf aa.tar.bz2 
[root@server ~]#

6.2.3 zip的用法

zip是常用的压缩工具,在Windows中也经常使用。zip的用法如下。

压缩文件:  zip aa.zip file 把file压缩到aa.zip
压缩目录: zip -r bb.zip dir 把目录dir压缩到bb.zip中

如果解压zip格式的压缩文件,则用unzip,用法如下。

unzip aa.zip

练习:把file压缩到aa.zip中,命令如下。

[root@server ~]# zip aa.zip file
  adding: file (deflated 100%)
[root@server ~]#
[root@server ~]# ls -lh file aa.zip
-rw-r--r--. 1 root root 100K 8月  11 10:36 aa.zip
-rw-r--r--. 1 root root 100M 8月  10 23:48 file
[root@server ~]#

解压zip格式的压缩文件,命令如下。

[root@server ~]# rm -rf file
[root@server ~]# unzip aa.zip
Archive:  aa.zip
  inflating: file                    
[root@server ~]#

作业

  1. 有一个压缩文件aa.tar.gz,现在想把他解压用的命令是:
    a. tar xvf aa.tar.gz
    b. tar jxf aa.tar.gz
    c. tar zxf aa.tar.gz
    d. gzip -d aa.tar.gz

  2. 有一个压缩文件aa.tar.bz2,现在想把他解压用的命令是:
    a. tar xvf aa.tar.gz
    b. tar jxf aa.tar.gz
    c. tar zxf aa.tar.gz
    d. gzip -d aa.tar.gz

  3. 有一个压缩文件figlet-2.2.4.tar.gz,在不解压的情况下查看里面有哪些文件,用的命令是?

a. tar tf figlet-2.2.4.tar.gz
b. tar lf figlet-2.2.4.tar.gz
c. tar xf figlet-2.2.4.tar.gz
d. tar xf figlet-2.2.4.tar.gz

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读