实验6:Linux文件与文件系统的压缩与打包
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖北经济学院电子工程系嵌入式Linux系
统
实验六:Linux文件与文件系统的压缩与打包1实验目的
通过实验掌握Linux文件与文件系统的压缩与打包
2实验设备
硬件:PC机一台
软件:Windows98/XP/2000系统,VMware Workstation6.0,Red Hat Linux 3实验内容
(1)compress
(2)gzip bzip2
(3)tar
4实验预习要求
仔细阅读参考书:
【1】鸟哥的Linux私房菜基础学习篇第三版,人民邮电出版社,鸟哥【2】嵌入式Linux系统开发标准教程,人民邮电出版社,华清远见嵌入式培训中心
【3】嵌入式Linux应用程序开发标准教程,人民邮电出版社,华清远见嵌入式培训中心
关于Linux文件压缩与打包的部分。
5实验步骤
(1)根据实验重点内容测试。
6实验重点:
湖北经济学院电子工程系嵌入式Linux系
统
在Linux的环境中,压缩文件案的扩展名大多是:*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2,为什么会有这样的扩展名呢?不是说Linux 的扩展名没有什么作用吗?
这是因为Linux 支持的压缩命令非常多,且不同的命令所用的压缩技术并不相同,当然彼此之间可能就无法相互压缩/解压缩文件案。
所以,当下载到某个压缩文件时,自然就需要知道该文件是由哪种压缩命令所制作出来的,好用来对照着解压缩啊!也就是说,虽然Linux 文件的属性基本上是与文件名没有绝对关系的,所以适当的扩展名还是必要的!底下我们就列出几个常见的压缩文件的扩展名:
*.Z compress 程序压缩的文件;
*.gz gzip 程序压缩的文件;
*.bz2bzip2 程序压缩的文件;
*.tar tar 程序打包的数据,并没有压缩过;
*.tar.gz tar 程序打包的文件,其中并且经过gzip 的压缩
*.tar.bz2 tar 程序打包的文件,其中并且经过bzip2 的压缩
Linux上常见的压缩命令就是gzip 和bzip2 ,至于compress 已经不再流行了。
gzip 是由GNU 计划所开发出来的压缩命令,该命令已经取代了compress 。
后来GNU 又开发出bzip2 这个压缩比更好的压缩命令!不过,这些命令通常仅能针对一个文件来压缩和解压缩,如此一来,每次压缩和解压缩都要一大堆文件,比较麻烦?此时,打包软件tar就显的很重要了!
这个tar 可以将很多文件『打包』成为一个文件!甚至是目录也可以这么
玩。
不过,单纯的tar 功能仅是『打包』而已,亦即是将很多文件集结成为一个文件,事实上,他并没有提供压缩的功能,后来,GNU 计划中,将整个tar 不压缩的功能结合在一起,如此一来提供使用者更方便并且更强大的压缩不打包功能!
compress
compress这个压缩命令是非常老旧的一款。
但gzip 已经可以解开使用compress 压缩的文件。
[root@localhost ~]# compress [-rcv] 文件或目录<==这里是压缩
[root@localhost ~]# uncompress 文件.Z <==这里是解压缩
选项与参数:
-r :可以连同目录下的文件也同时压缩;
-c :将压缩数据输出成为standard output (输出到屏幕)
-v :可以显示压缩后的文件信息以及压缩过程中的一些文件名变化。
范例一:将/etc/man.config 复制到/tmp ,并加以压缩
[root@localhost ~]# cd /tmp
[root@localhost tmp]# cp /etc/man.config .
[root@localhost tmp]# compress -v man.config
man.config: -- replaced with man.config.Z Compression: 41.86%
[root@localhost tmp]# ls -l /etc/man.config /tmp/man*
-rw-r--r-- 1 root root 4617 Jan 6 2007 /etc/man.config <==原有文件
-rw-r--r-- 1 root root 2684 Nov 10 17:14 /tmp/man.config.Z <==经过压缩的文
件!
可以看出,复制到/tmp 的man.config 不见了!因为这个文件被压缩成为man.config.Z。
也就是说,在默认的情况中,被compress 压缩的源文件会不见,而压缩文件会被建立起来,而且扩展名会是*.Z。
从上面可以伤处,文件由原本的4617bytes 降低到2684bytes左右,确实有减少!
解压缩方式
范例二:将刚刚的压缩文件解开
[root@localhost tmp]# uncompress man.config.Z
[root@localhost tmp]# ll man*
-rw-r--r-- 1 root root 4617 Nov 10 17:14 man.config
解压缩直接用uncompress 即可!解压缩完毕后该文件就自动的还原了!不过,那个压缩文件却又不存在了。
如果想要保留源文件且又要建立压缩文件?可以使用-c 的语法!
范例三:将man.config 压缩成另外一个文件来备份
[root@localhost tmp]# compress -c man.config > man.config.back.Z
[root@localhost tmp]# ll man*
-rw-r--r-- 1 root root 4617 Nov 10 17:14 man.config
-rw-r--r-- 1 root root 2684 Nov 10 17:24 man.config.back.Z
这个-c 的选项会将压缩过程的数据输出到屏幕上,而不是写入成为*.Z 的压缩文件。
所以,可以通过数据流重定向的方法将数据输出成为另一个文件名。
compress 已经很少人在使用了,因为这个程序无法解开*.gz 的文件,而gzip 则可以解开*.Z 的文件。
gzip, zcat
gzip 可以说是应用度最广的压缩命令了!目前gzip 可以解开compress, zip 和gzip 等软件所压缩的文件。
至于gzip 所建立的压缩文件为*.gz 的文件名!
语法如下:
[root@localhost ~]# gzip [-cdtv#] 文件名
[root@localhost ~]# zcat 文件名.gz
选项与参数:
-c :将压缩的数据输出到屏幕上,可通过数据流重定向来处理;
-d :解压缩的参数;
-t :可以用来检验一个压缩文件的一致性,看看文件有无错误;
-v :可以显示出原文件/压缩文件案的压缩比等信息;
-# :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是-6
范例一:将/etc/man.config 复制到/tmp ,并且以gzip 压缩
[root@localhost ~]# cd /tmp
[root@localhost tmp]# cp /etc/man.config .
[root@localhost tmp]# gzip -v man.config
man.config: 56.1% -- replaced with man.config.gz
[root@localhost tmp]# ll /etc/man.config /tmp/man*
-rw-r--r-- 1 root root 4617 Jan 6 2007 /etc/man.config
-rw-r--r-- 1 root root 2684 Nov 10 17:24 /tmp/man.config.back.Z
-rw-r--r-- 1 root root 2057 Nov 10 17:14 /tmp/man.config.gz <==gzip压缩比较佳
与compress 类似的,当使用gzip 进行压缩时,在默认的状态下原本的文件会被压缩成为.gz 的文件名,源文件就不再存在了。
同时可以发现,由于gzip 的压缩比要比compress 好的多,所以建议使用gzip!此外,使用gzip 压缩的文件在Windows 系统中可以被WinRAR 这个软件解压缩。
相关例子如下:
范例二:由于man.config 是文本文件,请将范例一的压缩文件的内容读出来!
[root@localhost tmp]# zcat man.config.gz
由于man.config 这个原本的文件是是文本文件,因此可以使用zcat 去读取。
此时屏幕上会显示man.config.gz 解压缩之后的文件内容!
范例三:将范例一的文件解压缩
[root@localhost tmp]# gzip -d man.config.gz
也可以使用gunzip 这个命令,但不好背!
范例四:将范例三解开的man.config 用最佳的压缩比压缩,并保留原本的文件
[root@localhost tmp]# gzip -9 -c man.config > man.config.gz
其实gzip 的压缩已经优化过了,所以虽然gzip 提供1~9 的压缩等级,不过使用默认的 6 就非常好用了!
cat 可以读取纯文本文件,zcat 则可以读取纯文本文件被压缩后的压缩文件!由于gzip 这个压缩命令主要想要用来取代compress 的,所以不但compress 的压缩文件案可以使用gzip 来解开,同时zcat 这个命令可以同时读取compress 和gzip 的压缩文件!
bzip2, bzcat
gzip 是为了取代compress 并提供更好的压缩比,那么bzip2 则是为了取代gzip 并提供更佳的压缩比。
bzip2 的用法几乎与gzip 相同:
[root@localhost ~]# bzip2 [-cdkzv#] 文件名
[root@localhost ~]# bzcat 文件名.bz2
选项与参数:
-c :将压缩的过程产生的数据输出到屏幕上!
-d :解压缩
-k :保留源文件,而不会删除原始的文件!
-z :压缩的参数
-v :可以显示出原文件/压缩文件的压缩比等信息;
-# :与gzip 同样的,都是在计算压缩比的参数,-9 最佳,-1 最快!
范例一:将刚刚的/tmp/man.config 用bzip2 压缩
[root@localhost tmp]# bzip2 -z man.config
此时man.config 会变成man.config.bz2 !
范例二:将范例一的文件内容读出来!
[root@localhost tmp]# bzcat man.config.bz2
此时屏幕上会显示man.config.bz2 解压缩之后的文件内容!
范例三:将范例一的文件解压缩
[root@localhost tmp]# bzip2 -d man.config.bz2
范例四:将范例三解开的man.config 用最佳的压缩比压缩,并保留原本的文件
[root@localhost tmp]# bzip2 -9 -c man.config > man.config.bz2
使用compress 扩展名自动建立为.Z ,使用gzip 扩展名自动建立为.gz,使用bzip2 则是自动的将扩展名设置为.bz2!所以当使用具有压缩功能的bzip2 -z 时,那么man.config 就会自动的变成了man.config.bz2 这个文件名!
如果想要读取压缩文件的内容,是否一定要解开?不需要!可以使用简便的bzcat 这个命令来读取内容即可!例如上面的例子中,可以使用bzcat man.config.bz2 来读取数据而不需要解开!此外,当要解开一个压缩文件时,这个文件的名称为.bz, .bz2, .tbz, .tbz2 等等,那么就可以尝试使用bzip2 来解!也可以使用bunzip2 这个命令来取代bzip2 -d。
打包命令:tar
前面的命令大多仅能针对单一文件来进行压缩,虽然gzip 和bzip2 也能够针对目录来进行压缩,不过,这两个命令对目录的压缩指的是将目录内的所有文件"分别" 进行压缩的操作!而不像在Windows 的系统,可以使用类似WinRAR 这一类的压缩软件来将好多数据打包成一个文件。
这种将多个文件或目录包成一个大文件的命令功能,即打包命令!tar 可以将多个目录或文件打包成一个大文件,同时还可以通过gzip/bzip2 的支持,将该文件同时进行压缩!由于tar 的使用太广泛了,目前Windows 的WinRAR 也支持.tar.gz 文件名的解压缩。
tar 的选项参数非常多!常用的参数如下:
[root@localhost ~]# tar [-j|-z] [cv] [-f 建立的文件名] filename. <=打包不压缩[root@localhost ~]# tar [-j|-z] [tv] [-f 建立的文件名] <==察看文件名
[root@localhost ~]# tar [-j|-z] [xv] [-f 建立的文件名] [-C 目录] <==解压缩
选项与参数:
-c :建立打包文件,可搭配-v 来察看过程中被打包的文件名(filename)
-t :察看打包文件的内容含有哪些文件名,重点在察看文件名;
-x :解打包或解压缩的功能,可以搭配-C (大写) 在特定目录解开
特别需要注意的是,-c, -t, -x 不可同时出现在一串命令列中。
-j :通过bzip2 的支持进行压缩/解压缩:此时文件名最好为*.tar.bz2
-z :通过gzip 的支持进行压缩/解压缩:此时文件名最好为*.tar.gz
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f 后面接要被处理的文件名!建议-f 单独写一个选项!
-C 目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
--exclude=FILE:在压缩的过程中,不要将FILE 打包!
常用的tar 组合命令:
压缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
查询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
这里的filename.tar.bz2 是我们自己取的文件名,tar 并不会主动的产生建立的文件名!需要我们自定义!所以扩展名就显的很重要了!
如果不加[-j|-z] 的话,文件名最好取为*.tar 即可。
如果是-j 选项,代表有bzip2 的支持,因此文件名最好就取为*.tar.bz2 ,因为bzip2 会产生.bz2 的扩展名!如果是加上了-z 的gzip 的支持,那文件名最好取为*.tar.gz !另外,由于-f filename 是紧接在一起的,过去常会写成–jcvf filename 也可以。
建议-f filename 与其他选项独立出来,会比较不容易发生问题。
湖北经济学院电子工程系嵌入式Linux系
统
使用tar 加入-j 或-z 的参数备份/etc/目录
[root@localhost ~]# tar -zcv -f /root/etc.tar.gz /etc
由于加上-v 这个选项,因此正在操作中的文件名就会显示在屏幕上。
[root@localhost ~]# tar -jcv -f /root/etc.tar.bz2 /etc
[root@localhost ~]# ll /root/etc*
-rw-r--r-- 1 root root 8740252 Nov 15 23:07 /root/etc.tar.bz2
-rw-r--r-- 1 root root 13010999 Nov 15 23:01 /root/etc.tar.gz
可见bzip2的压缩效果比gzip 好。
查看打包文件的文件名:
[root@localhost ~]# tar -jtv -f /root/etc.tar.bz2
将备份的数据解压缩,并考虑特定目录的解压缩动作(-C 选项的应用)
一般,该打包文件会“在本目录下进行解压缩”!要指定欲解开的目录,可以使用-C 这个选项:
[root@localhost ~]# tar -jxv -f /root/etc.tar.bz2 -C /tmp
打包某目录,但不包含该目录下的某些文件的用法:
假设想要打包/etc/ /root 这几个重要的目录,但却不想要打包/root/etc* 开头的文件!而且假设这个新的打包文件要放置成为/root/system.tar.bz2,此时我们可以通过--exclude:
[root@localhost ~]# tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* \
> --exclude=/root/system.tar.bz2 /etc /root。