linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

发布于 2018-01-30  372 次阅读


zip 压缩工具

支持压缩目录,压缩完之后不删除原文件

准备工作:

使用 yum -y install zip unzip 安装 zip 包和 unzip 包,再把大文件复制到 aminglinux 目录中

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

zip 1.txt.zip 1.txt:压缩文件

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

zip -r aming.zip 1.txt aminglinux/:文件和目录一起压缩

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

unzip aming.zip:解压缩 大写 A 参数为全部都 yes

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

unzip 1.txt.zip -d test/:解压的时候指定解压到指定目录(文件名无法更改,压缩前是什么名字,压缩后就是什么名字)

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

unzip -l aming.zip:查看压缩包里面都有哪些文件

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

tar 打包

只是一个打包工具,并不负责压缩(但因为 1 个块为 4KB,而打包会做一些小的压缩,所以打包之后可能总大小会有点变化)

tar -cvf aminglinux.tar aminglinux/:打包一个目录:c 参数为创建,v 参数为过程可视化,f 后面跟 tar 包名和要打包的东西,c 和 f 是必须的,不能省略

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

tar -cvf aminglinux.tar aminglinux/ 1.txt 2.txt:把目录和文件一起打包

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

tar -tf aminglinux.tar:查看包里面都有哪些文件

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

tar -cvf aminglinux.tar --exclude aming1 --exclude 2.txt aminglinux/ 1.txt 2.txt:设置在打包的时候过滤 aming1 目录和 2.txt 文件,也能设置*.txt,过滤所有 txt 后缀的文件

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

tar -xvf aminglinux.tar:解包

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

打包并压缩

tar -zcvf aminglinux.tar.gz aminglinux/ 1.txt 3.txt:tar 可以在打包的时候顺便压缩,这里用的是 gzip,加 z,解包并解压缩可以把 c 改为 x

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

tar -jcvf aminglinux.tar.gz aminglinux/ 1.txt 3.txt:打包的时候用 bzip2 压缩,加 j,解包并解压缩可以把 c 改为 x

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

tar -Jcvf aminglinux.tar.xz aminglinux/ 1.txt 3.txt:打包的时候用 xz 压缩,加 J,解包并解压缩可以把 c 改为 x

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

tar -tf aminglinux.tar.bz2:tf 参数,就算是打包的时候压缩了也可以查看包里面的文件

linux 学习笔记-020-zip 压缩工具,tar 打包和打包并压缩

作业题

  1. gzip, bzip2 能否直接压缩目录呢?

不可以

  1. 请快速写出,使用 gzip 和 bzip2 压缩和解压一个文件的命令。

压缩:gzip filename        bzip2 filename

解压:gzip -d filename.gz        bzip2 -d filename.bz2

  1. tar 在打包的时候,如果想排除多个文件或者目录如何操作?
[root@aming-01 ~]# tree 321/

321/

├── 1

├── 1.txt

├── 2

├── 234

│   ├── 1

│   ├── 1.txt

│   ├── 2

│   ├── 2.txt

│   ├── aming3 -> /tmp/aming2/

│   ├── aminglinux111.bak

│   └── aminglinux.bak

├── 2.txt

├── aming3 -> /tmp/aming2/

├── aminglinux111.bak

├── aminglinux.bak

└── d6z

    ├── 1.txt.bz2

    ├── 2.txt

    ├── 3.txt

    └── 4.txt

6 directories, 14 files

[root@aming-01 ~]# tar -cvf 321.tar --exclude 1 --exclude 2 --exclude 1.txt --exclude 2.txt 321/

321/

321/234/

321/234/aminglinux.bak

321/234/aminglinux111.bak

321/234/aming3

321/d6z/

321/d6z/3.txt

321/d6z/1.txt.bz2

321/d6z/4.txt

321/aminglinux.bak

321/aminglinux111.bak

321/aming3
  1. 请实验,如果不加 "-" 是否正确, 如 tar zcvf  1.tar.gz  1.txt 2.txt ?

正确

[root@aming-01 ~]# tar cvf 321.tar --exclude 1 --exclude 2 --exclude 1.txt --exclude 2.txt 321/

321/

321/234/

321/234/aminglinux.bak

321/234/aminglinux111.bak

321/234/aming3

321/d6z/

321/d6z/3.txt

321/d6z/1.txt.bz2

321/d6z/4.txt

321/aminglinux.bak

321/aminglinux111.bak

321/aming3
  1. 如何使用 tar 打包和解包 .tar.gz, .tar.bz2 的压缩包?

tar.gz 打包和解包:

[root@aming-01 ~]# du -sh 321/

5.2M 321/

[root@aming-01 ~]# tar -zcvf 321.tar.gz --exclude 1 --exclude 2 --exclude 1.txt --exclude 2.txt 321/

321/

321/234/

321/234/aminglinux.bak

321/234/aminglinux111.bak

321/234/aming3

321/d6z/

321/d6z/3.txt

321/d6z/1.txt.bz2

321/d6z/4.txt

321/aminglinux.bak

321/aminglinux111.bak

321/aming3

[root@aming-01 ~]# du -sh 321.tar.gz

1.3M 321.tar.gz

[root@aming-01 ~]# tar -zxvf 321.tar.gz --exclude 1 --exclude 2 --exclude 1.txt --exclude 2.txt 321/

321/

321/234/

321/234/aminglinux.bak

321/234/aminglinux111.bak

321/234/aming3

321/d6z/

321/d6z/3.txt

321/d6z/1.txt.bz2

321/d6z/4.txt

321/aminglinux.bak

321/aminglinux111.bak

321/aming3

tar.bz2 打包和解包:

[root@aming-01 ~]# tar -jcvf 321.tar.bz2 --exclude 1 --exclude 2 --exclude 1.txt --exclude 2.txt 321/

321/

321/234/

321/234/aminglinux.bak

321/234/aminglinux111.bak

321/234/aming3

321/d6z/

321/d6z/3.txt

321/d6z/1.txt.bz2

321/d6z/4.txt

321/aminglinux.bak

321/aminglinux111.bak

321/aming3

[root@aming-01 ~]# du -sh 321.tar.bz2

804K 321.tar.bz2

[root@aming-01 ~]# tar -jxvf 321.tar.bz2 --exclude 1 --exclude 2 --exclude 1.txt --exclude 2.txt 321/

321/

321/234/

321/234/aminglinux.bak

321/234/aminglinux111.bak

321/234/aming3

321/d6z/

321/d6z/3.txt

321/d6z/1.txt.bz2

321/d6z/4.txt

321/aminglinux.bak

321/aminglinux111.bak

321/aming3
  1. 找一个大点的文件,使用 tar 分别把这个文件打成 .tar.gz 和.tar.bz2 压缩包,比较一下哪个包会更小,从而得出结论,是 gzip 压缩效果好还是 bzip2 压缩效果好?

bzip2 的压缩效果好

[root@aming-01 ~]# du -sh 321/

5.2M 321/

[root@aming-01 ~]# tar -zcvf 321.tar.gz --exclude 1 --exclude 2 --exclude 1.txt --exclude 2.txt 321/

321/

321/234/

321/234/aminglinux.bak

321/234/aminglinux111.bak

321/234/aming3

321/d6z/

321/d6z/3.txt

321/d6z/1.txt.bz2

321/d6z/4.txt

321/aminglinux.bak

321/aminglinux111.bak

321/aming3

[root@aming-01 ~]# tar -jcvf 321.tar.bz2 --exclude 1 --exclude 2 --exclude 1.txt --exclude 2.txt 321/

321/

321/234/

321/234/aminglinux.bak

321/234/aminglinux111.bak

321/234/aming3

321/d6z/

321/d6z/3.txt

321/d6z/1.txt.bz2

321/d6z/4.txt

321/aminglinux.bak

321/aminglinux111.bak

321/aming3

[root@aming-01 ~]# du -sh 321.tar.gz

1.3M 321.tar.gz

[root@aming-01 ~]# du -sh 321.tar.bz2

804K 321.tar.bz2
  1. 使用 tar 打包并压缩的时候,默认压缩级别为几? 想一想如何能够改变压缩级别呢?(提示,tar 本身没有这个功能哦,可以尝试拆分打包和压缩)

tar 没有压缩等级,需要改变压缩等级,要在使用 gzip 或者 bzip2 压缩的时候指定压缩等级

[root@aming-01 ~]# tar -cvf 321.tar 321/

321/

321/1/

321/1.txt

321/2/

321/2.txt

321/234/

321/234/1/

321/234/1.txt

321/234/2/

321/234/2.txt

321/234/aminglinux.bak

321/234/aminglinux111.bak

321/234/aming3

321/d6z/

321/d6z/2.txt

321/d6z/3.txt

321/d6z/1.txt.bz2

321/d6z/4.txt

321/aminglinux.bak

321/aminglinux111.bak

321/aming3

[root@aming-01 ~]# du -sh 321.tar

5.2M 321.tar

[root@aming-01 ~]# gzip -9 321.tar

gzip: 321.tar.gz already exists; do you wish to overwrite (y or n)? y

[root@aming-01 ~]# du -sh 321.tar.gz

1.8M 321.tar.gz

扩展

  1. 在 windows 下常见的压缩包有 rar 和 zip,默认 rar 在 linux 下是不支持压缩和解压的,但是也有相关的工具可以安装在 linux 平台上。而 zip 的压缩包是可以同时存在于 linux 平台和 windows 平台上的哦。

使用 zip 压缩:

zip 可以压缩目录也可以压缩文件,压缩目录时,需要指定目录下的文件哦,看例子吧:

zip  1.txt.zip  1.txt

zip  dir1.zip  dir1/*

说明: zip 后面先跟目标文件名,也就是压缩后的自定义压缩包名,然后是要压缩的文件或者目录。

思考题: 在压缩目录时,如果只写目录名,会发生什么?而目录下还有二级目录甚至更多级目录时,能否也一并压缩二级目录下的文件呢?

做完实验后,相信您已经得出结论,看看是否和阿铭的答案一致?答案是,当目录下还有二级目录甚至更多级目录时,zip 并不会把二级目录下的文件压缩,而仅仅是把二级目录本身压缩,那有没有级联的选项呢?当然有,那就是:

zip -r dir1.zip dir1/

这样也不需要用 dir1/* 了,所以记住,使用 zip 压缩目录时,必须要加上 -r 选项。

好了,说完压缩,也该说如何解压了吧,解压的命令并不是 zip 了,而是叫做 unzip ,解压 1.txt.zip 的命令为:

unzip 1.txt.zip

  1. bzcat 命令的使用:

对于使用 bzip2 压缩的文本文档,可以使用 bzcat 命令直接查看文档内容。

cp /etc/passwd ./11.txt

bzip2 11.txt

bzcat 11.txt.bz2

  1. 计算机下的压缩原理

实际应用

利用 tar 通过网络拷贝数据:

http://www.lishiming.net/thread-152-1-2.html

Tar 打包、压缩与解压缩到指定目录的方法:

http://www.lishiming.net/thread-96-1-3.html

linux 下不支持解压大于 4G 的 zip 压缩包:

http://www.lishiming.net/thread-1813-1-1.html