写在前面
这则笔记主要整理Linux文件压缩与打包方面的知识,主要包括以下内容:
常见压缩工具介绍
打包工具
进阶知识:如何压缩/解压缩超过4G的大文件
不解压查看压缩包内容
常见压缩工具介绍
压缩工具 | 优点 | 缺点 | 使用场景 |
---|---|---|---|
zip | 资历最老,linux各种版本都支持,可以压缩目录 | 压缩比、压缩时间都不占优势 | 基本上是‘老油条’,哪儿都能用,但是不好用 |
gzip | 优势是速度快,压缩比还不错,内存占用小,centos默认安装 | 压缩比不高,不支持目录压缩 | 在内存比较小的建议使用 |
bzip2 | 压缩比gzip高 | 压缩时间长;内存占用比gzip大;压缩比不如xz;不支持目录压缩 | 比gzip好一点,但是又不如xz,处境比较尴尬 |
xz | 2009年诞生的新贵,优点是压缩比显著优于zip、gzip、bzip2等前辈 | 压缩时间较长,不支持目录压缩 | 适用于对存储或带宽有严格要求的场景 |
gzip压缩工具
命令行格式: gzip [参数] [filename]
注:
gzip只能压缩文件,不能压缩目录;如果要压缩目录,可以加-r选项;
gzip默认压缩级别为6;
常用参数:
参数 | 解释 |
---|---|
-n | n代表压缩等级,从1到9,默认为6,可不加。 |
-d | 表示解压缩 |
-c | 指定目录 |
压缩文件
不带任何参数,直接压缩
1 | //准备压缩文件 |
解压缩
- 方法一:
gzip -d [filename]
1 | [root@stevey ~]# gzip -d b.txt.gz |
- 方法二:
gunzip [参数] [filename]
1 | [root@stevey ~]# gunzip b.txt.gz |
注意:
-r
参数需记忆,表示归递处理,将指定目录下的所有文件及子目录一并处理。平常参数可省略,直接使用
gunzip [filename]
解压文件。
进阶:指定压缩/解压缩保存路径
默认采用gzip
压缩,压缩包会放在当前目录下,并删除原文件;使用-c
参数可以指定压缩包路径,这样原文件就不会被删除了。
- 指定压缩目录
gzip -c [filename] > [保存目录]
1 | [root@stevey ~]# gzip -c b.txt > /tmp/test/b.txt.gz |
- 指定解压缩目录
gzip -d -c [压缩包名] > [指定解压缩文件路径]
1 | [root@stevey ~]# gzip -c b.txt /tmp/test/b.txt.gz > /tmp/c.txt |
注意:
这里的解压路径是绝对路径;
文件名支持重命名;
校验一下,这两个文件是一模一样的。
1 | [root@stevey ~]# wc -l /tmp/test/b.txt |
bzip2压缩工具
bzip2 安装:
centOS 7 默认没有,需要单独安装 yum install -y bzip2
bzip2 使用:
命令行格式:bzip2 [参数] [filename]
注:
bzip2 工具也是支持文件压缩,不支持目录压缩;
默认压缩级别为9;
常用参数
参数 | 解释 |
---|---|
-z | 表示压缩,可省略 |
-d | 表示解压缩 |
示例:
1 | bzip2 1.txt //压缩1.txt |
xz压缩工具
命令行格式: xz [参数] [filename]
注:bzip2 工具也是支持文件压缩,不支持目录压缩。
常见参数:
参数 | 解释 |
---|---|
-z | 表示压缩,可省略 |
-d | 表示解压缩 |
示例:
1 | xz 1.txt //压缩1.txt |
zip
压缩工具
除了上述这些打包压缩工具,还需要考虑到在windows、linux、 mac下通用的打包压缩格式 .zip
zip
压缩
zip 工具centos默认没有,需要单独安装 yum install -y zip
命令行格式:zip [参数] [压缩包名称] [源文件或目录]
如果目录下有还有二级甚至多级目录,zip命令 不加参数时,仅仅会讲二级目录压缩;
如果想一并压缩二级目录及多级目录,有两种方法:
- 第一种方法:使用通配符
1 | zip test.zip test/* |
- 第二种方法:使用 -r 参数
1 | zip -r test.zip test/ |
unzip
解压缩
zip
文件需要单独安装unzip
工具来解压,安装命令为 yum install -y unzip
命令行格式: unzip [filename]
文件打包工具 tar
由于gzip、bzip2、xz
三个压缩工具都是针对文件进行压缩,对目录束手无策,因此一款打包工具呼之欲出,这就是tar
。
不仅如此,tar
强大之处在于,配合参数,可以打包压缩一起来。
命令行格式:tar [参数] [目标文件] [源文件或目录]
注:
目标文件
指的是打包后的文件名源文件或目录
指的是需要打包的文件或目录
常用参数
参数 | 解释 |
---|---|
-c | 小写c,建立一个tar包或压缩包 |
-C | 大写C,切换到指定目录 |
-v | 表示可视化 |
-f | 指定压缩文件包名称 (多个参数组合的情况下,把f放在最后,紧跟压缩文件包名) |
-t | 查看tar包里的内容 |
-z | 指定gzip压缩 |
-j(小写) | 指定bzip2压缩 |
-J(大写) | 指定xz压缩 |
-x | 解包或解压缩 |
–exclude filename | 特殊用法,表示在打包或者压缩是,将该filename排除在外 |
常见用法:
tar
命令的参数经常连用,示例如下:
文件目录打包
-cvf
可视化打包目录test
,指定文件名为test.tar
-xvf
解包test.tar
- 解包到指定目录
-C
1 | [root@stevey ~]# tar -xvf test.tar -C /root/test2/ |
--exclude filename
特殊用法,将指定文建排除在外
当前目录的情况
打包压缩的情况
-tf
查看一下打包后的目录文件情况
注:--exclude
支持过滤多个文件,每个文件名都要用 --exclude
隔开。
文件打包并用gzip处理
-czvf
打包文件并使用gzip压缩
-zxvf
解压缩.tar.gz
格式的文件
zcat
查看压缩包文件内容
注: zcat
用于不真正解压缩文件,就能显示压缩包中文件的内容的场景。
文件打包并用bzip2处理
-cjvf
打包文件并使用bzip2压缩
-xjvf
解压缩 .tar.bz2
格式的文件
bzcat
不解压包查看内容
文件打包并用xz处理
这里补充一点网上查到的资料:根据维基百科解释,xz
是一个使用 LZMA压缩算法的无损数据压缩文件格式。由于 xz 文件格式的压缩率更高,已在 Linux 各发行版中广泛使用。最典型的就是Linux内核,比如Linux内核3.12就是.xz后缀的文件,压缩包仅72.85MB,解压后能达到518.77MB。
-Jcvf 压缩文件 注:J为大写
1 | tar -Jcvf linux-3.12 |
-Jxvf 解压缩文件 注:J为大写
1 | tar -Jxvf linux-3.12.tar.xz |
进阶:如何压缩/解压缩超过4G的文件
linux 的unzip命令处理4G以上的压缩包会报错,解决办法是换个压缩工具,使用7zip工具。
7zip 安装:
1 | yum install -y wget //先安装wget ,已经安装过的可以跳过这一步 |
注意:这里遇到了两个坑
第一,错误提示:g++: Command not found
,如下图所示。估计是缺某个依赖包,网上查了一下,固然如此
解决方案:
1 | yum -y install gcc+ gcc-c++ |
第二,也是错误提示,就是上图中的这一句:make[1]:Leaving directory /root/p7zip_16.02/CPP/7zip/Bundles/Alone
网上查了半天,也没查出所以然,后来试着make install
安装了一下,输入7zip 显示如下:
1 | [root@stevey p7zip_16.02]# p7zip |
再后来,发现命令行输错了,正确的命令行格式是 7za [参数] [文件或目录名]
此外,网上很多教程都提到 安装如果发现乱码,请执行命令export LANG=zh_CN.GBK
不过,我没有遇到这个问题。
7zip使用:
命令行格式:7za [参数] [文件或目录名]
常见用法:
1 | 7za a -t 7z -r [压缩包名] [压缩文件/目录] //压缩命令,-t指定压缩类型,默认7z;-r指归递处理,表示递归所有的子文件夹 |
查看压缩文件
查看压缩文件类型:file [压缩包名]
1 | [root@stevey ~]# file b.txt.gz |
查看压缩文件内容:
zcat命令用于不真正解压缩文件,就能显示压缩包中文件的内。
命令行格式:
1 | zcat [参数] [压缩包名] |
常用参数 | 含义 |
---|---|
-S | 指定gzip格式的压缩包的后缀。当后缀不是标准压缩包后缀时使用此选项; |
-c | 将文件内容写到标注输出; |
-d | 执行解压缩操作; |
-l | 显示压缩包中文件的列表; |
-L | 显示软件许可信息; |
-q | 禁用警告信息; |
-r | 在目录上执行递归操作; |
-t | 测试压缩文件的完整性; |
-V | 显示指令的版本信息; |
-l | 更快的压缩速度; |
示例:
1 | [root@stevey ~]# zcat !$ |head //这里涉及`!$`特殊用法,指的是上一条bash命令的最后一个值,也就是 `b.txt.gz` |