压缩打包
常见的压缩文件:
Windows:.zip .7z .rar
Linux:.zip, .gz, .bz2, .xz, .tar.gz, .tar.bz2, .tar.xz
为什么要压缩?
有时候对电脑磁盘上的文件或者文件夹做压缩,方便传输。压缩后空间会小一点,针对磁盘来说,会节省空间。对网络来说,压缩后对带宽要求会低一点,压缩可以有效地减小带宽。
Linux下的压缩文件不一定非要使用上述后缀名,但是便于使用和辨认,遵循这些约定。
==Linux不识别rar格式的压缩文件==
.gz 表示由gzip压缩工具压缩的文件。
.bz2 表示由bzip2压缩工具压缩的文件。
.tar 表示由tar打包程序打包的文件(tar没有压缩功能,只是把一个目录合并成一个文件)
.tar.gz 先打包,在由gzip压缩
.tar.bz2 先打包,在由bzip2压缩
.tar.xz 先打包,在由xz压缩
gzip压缩工具
格式
gzip [参数] filename
选项
-a或——ascii:使用ASCII文字模式;
-d或--decompress或----uncompress:解开压缩文件;
-f或——force:强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接;
-h或——help:在线帮助;
-l或——list:列出压缩文件的相关信息;
-L或——license:显示版本与版权信息;
-n或--no-name:压缩文件时,不保存原来的文件名称及时间戳记;
-N或——name:压缩文件时,保存原来的文件名称及时间戳记;
-q或——quiet:不显示警告信息;
-r或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-S或<压缩字尾字符串>或----suffix<压缩字尾字符串>:更改压缩字尾字符串;
-t或——test:测试压缩文件是否正确无误;
-v或——verbose:显示指令执行过程;
-V或——version:显示版本信息;
-<压缩效率>:压缩效率是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高;
--best:此参数的效果和指定“-9”参数相同;
--fast:此参数的效果和指定“-1”参数相同。
示例
gzip -d是解压缩。
gzip -# filename //#范围1-9,默认6
gzip 不能压缩目录
gzip filename 压缩文件,暂不支持压缩目录,压缩后源文件消失
gzip -d filename.gz 解压文件,解压后,源压缩文件消失
gunzip filename.gz 解压文件, 解压后,源压缩文件消失
gzip –c filename > /tmp/filename.gz指定压缩文件路径,并且源文件存在
gzip –d –c /tmp/filename.gz > /目录/filename 解压文件到那个路径下,并且源压缩文件存在。
gunzip –c /tmp/filename.gz > /目录/filename 解压文件到那个路径下,并且源压缩文件存在。
zcat 1.txt.gz 查看.gz文件
file /tmp/1.txt.gz 查看文件的属性
- gzip 1.txt
进入/tmp/下做实验,首先创建一个目录
[root@linux7-128 ~]# cd /tmp/
[root@linux7-128 tmp]# mkdir hgz
然后在创建一个比较大的文件,可以把/etc/下所有conf后缀的文件内部全部放到新文件下
(使用find命令先查找出/etc/下所有后缀为conf的文件)
[root@linux7-128 tmp]# find /etc/ -type f -name "*conf"
/etc/resolv.conf
/etc/pki/ca-trust/ca-legacy.conf
/etc/yum/pluginconf.d/fastestmirror.conf
/etc/yum/pluginconf.d/langpacks.conf
/etc/yum/protected.d/systemd.conf
......
/etc/abrt/plugins/CCpp.conf
/etc/geoclue/geoclue.conf
/etc/ntp.conf
/etc/setroubleshoot/setroubleshoot.conf
(然后将这些文件的内容全部传输至1.txt中,注意此时进入到hgz目录中)
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
(使用df -h查看文件大小,发现内存很小,多循环几次)
[root@linux7-128 hgz]# du -sh 1.txt
652K 1.txt
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
[root@linux7-128 hgz]# find /etc/ -type f -name "*conf" -exec cat {} >> 1.txt \;
[root@linux7-128 hgz]# du -sh 1.txt
4.7M 1.txt
[root@linux7-128 hgz]# wc -l 1.txt
132678 1.txt
这时候使用gzip压缩一下
[root@linux7-128 hgz]# gzip 1.txt
[root@linux7-128 hgz]# ls
1.txt.gz
[root@linux7-128 hgz]# du -sh 1.txt.gz
1.2M 1.txt.gz
经过压缩,文件名后缀变为了.gz,大小也缩小为1.2M。现在在解压一下,使用gzip -d
[root@linux7-128 hgz]# gzip -d 1.txt.gz
[root@linux7-128 hgz]# ls
1.txt
[root@linux7-128 hgz]# du -sh 1.txt
4.5M 1.txt
[root@linux7-128 hgz]# wc -l 1.txt
132678 1.txt
解压完成后发现一个问题,文件大小变为了4.5M,而没有解压缩之前的文件大小是4.7M,他们的行数是一样的,所以不是少了内容。这是因为之前在追加内容时,文件大小的虚的,类似海绵里的水,经过解压缩后,此时的文件大小才是正常的大小。
- gzip -(1-9)
gzip有种用法是后面-数字1-9,表示压缩级别,默认级别是6。级别1最不严谨,9最严谨,同时也最耗费CPU资源。
[root@linux7-128 hgz]# gzip -1 1.txt
[root@linux7-128 hgz]# du -sh 1.txt.gz
1.4M 1.txt.gz
这里可以看到使用1级别压缩后,大小为1.4M,使用默认级别6时压缩大小为1.2M。我们平时压缩一般保持默认即可。
[root@linux7-128 hgz]# gzip -9 1.txt
[root@linux7-128 hgz]# du -sh 1.txt.gz
1.2M 1.txt.gz
从上面可以看出,使用9级别压缩的大小和默认6级别大小是一样的,这说明当文件压缩到一定程度时,会取一个适中的值,不会再继续往小压缩。
- gunzip
gzip的另一种解压命令
[root@linux7-128 hgz]# gunzip 1.txt.gz
[root@linux7-128 hgz]# ls
1.txt
- 如何查看压缩文件,zcat
cat命令是不能查看压缩文件的,这时候文件以及成了一个二进制的文件。
这时候可以使用zcat,实际上这个命令就是解压后在查看
[root@linux7-128 hgz]# zcat 1.txt.gz
文件内容过多不在此多叙述。
也可以使用file命令查看压缩文件信息
[root@linux7-128 hgz]# file 1.txt.gz
1.txt.gz: gzip compressed data, was "1.txt", from Unix, last modified: Thu May 24 20:52:19 2018, max compression
- 压缩文件时保留原文件
[root@linux7-128 hgz]# gzip -c 1.txt > /tmp/1.txt.gz
[root@linux7-128 hgz]# ls
1.txt
[root@linux7-128 hgz]# ls /tmp/1.txt.gz
/tmp/1.txt.gz
[root@linux7-128 hgz]# file !$
file /tmp/1.txt.gz
/tmp/1.txt.gz: gzip compressed data, was "1.txt", from Unix, last modified: Thu May 24 20:52:19 2018
- 解压文件到其他地方
[root@linux7-128 hgz]# gzip -d -c /tmp/1.txt.gz > 2.txt
[root@linux7-128 hgz]# ls
1.txt 2.txt
[root@linux7-128 hgz]# wc -l *.txt
132678 1.txt
132678 2.txt
265356 总用量
[root@linux7-128 hgz]# du -sh *.txt
4.5M 1.txt
4.5M 2.txt
这是新解压的文件和原文件大小行数都是相同的
- gzip不能解压目录
递归的压缩目录
gzip -rv test6
这样,所有test下面的文件都变成了*.gz,目录依然存在只是目录里面的文件相应变成了*.gz.这就是压缩,和打包不同。因为是对目录操作,所以需要加上-r选项,这样也可以对子目录进行递归了。
递归地解压目录
gzip -dr test6</