Linux归档及压缩

本章主要介绍如何将Linux的文件进行归档和压缩。

       使用tar对多个文件进行归档

       使用gzip对文件进行压缩和解压

       使用bzip2对文件进行压缩和解压

       使用tar结合gzip 实现文件的归档和压缩

       使用tar结合bzip2 实现文件的归档和压缩

1.归档

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

        tar的语法如下。

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

归档文件一般使用tar后缀。

先做准备,拷贝几个文件到当前目录,命令如下。

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

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

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

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

[root@redhat8 ~]# ls -lh passwd services hosts aa.tar
-rw-r--r--. 1 root root 690K 12月  4 10:45 aa.tar
-rw-r--r--. 1 root root  158 12月  4 10:45 hosts
-rw-r--r--. 1 root root 2.6K 12月  4 10:45 passwd
-rw-r--r--. 1 root root 677K 12月  4 10:45 services

        可以看到,aa.tar文件的大小比三个文件大小的总和还大,说明用tar只有归档功能,并没有压缩功能。

        从上面的操作可以看出,当创建好归档文件后,源文件还是在的,即把 hosts、 passwd,services归档到aa.tar中之后,这三个文件依然存在。如果希望归档之后同时删除源文件,可以加上--remove-files选项。

        删除aa.tar,然后再次归档,命令如下。

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

可以看到,三个文件归档到aa.tar 中之后就被删除了。

查看归档文件中有哪些文件,可以使用t选项,命令如下。

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

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

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

这里已经把anaconda-ks.cfg 写入aa.tar中了。

对归档文件进行解档,解档的语法如下。

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

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

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

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

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

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

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

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

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

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

2 压缩

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

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

(1)f是读取哪里的内容,这里是/dev/zero。

(2)of是组成的文件名。

(3)count指定zero的数目。

(4)bs指定每个zero的大小,如果没有指定单位则默认为B。

        这里的意思是拿100个大小为1M的/dev/zero组成一个名称叫file的文件,此file的大小应 该是100M。

[root@redhat8 ~]# ls -lh file
-rw-r--r--. 1 root root 100M 12月  4 11:19 file

gzip的用法如下

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

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

[root@redhat8 ~]# gzip file
[root@redhat8 ~]# ls -lh file.gz
-rw-r--r--. 1 root root 100K 12月  4 11:19 file.gz

        可以看到,file原来100M,压缩成file.gz的大小只有100K。因为file文件过于简单,所以 压缩率很高。

        用gzip把 file.gz解压,命令如下。

root@redhat8 ~]# gzip -d file.gz

一般情况下,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@redhat8 ~]# tar zcf aa.tar.gz file
[root@redhat8 ~]# ls -lh aa.tar.gz file
-rw-r--r--. 1 root root 100K 12月  4 11:21 aa.tar.gz
-rw-r--r--. 1 root root 100M 12月  4 11:19 file

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

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

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

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

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

[root@redhat8 ~]# bzip2 file
[root@redhat8 ~]# ls -lh file.bz2
-rw-r--r--. 1 root root 113 12月  4 11:19 file.bz2

        这里把100M的file压缩到1K以下。因为file文件过于简单,所以压缩率很高。使用bzip2进行解压,命令如下。

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

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

tar jcf aa.tar.gz file1 file2 file3

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

[root@redhat8 ~]# tar jcf aa.tar.bz2 file
[root@redhat8 ~]# ls -lh aa.tar.bz2
-rw-r--r--. 1 root root 192 12月  4 11:22 aa.tar.bz2

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

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

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@redhat8 ~]# zip aa.zip file
  adding: file (deflated 100%)
[root@redhat8 ~]# ls -lh file aa.zip
-rw-r--r--. 1 root root 100K 12月  4 11:41 aa.zip
-rw-r--r--. 1 root root 100M 12月  4 11:19 file

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

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

你可能感兴趣的:(linux,运维)