文件打包与压缩
打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
打包压缩指的就是将多个文件或目录合并成为一个特殊的文件。就好比如我们搬家的时候,把所有的东西都打包到了一起,然后通过箱子装起来,节省了占用空间,也节省了来回搬东西的时间。
Linux下常见压缩包类型
格式 | 压缩工具/th> |
.zip | zip压缩工具 |
.gz | gzip压缩工具,只能压缩文件,会删除原文件(通常配合tar使用) |
.bz2 | bzip2压缩工具,只能压缩文件,会删除原文件(通常配合tar使用) |
.tar.gz | 先使用tar命令归档打包,然后使用gzip压缩 |
.tar.bz2 | 先使用tar命令归档打包,然后使用bzip压 |
gzip打包与压缩
gzip只能压缩文件,并且压缩完之后源文件就消失了。解压使用-d选项。
语法格式:
gzip 选项 参数
示例:
#压缩当前目录下名为file1的文件
[root@localhost ~]# gzip file1
#使用zcat查看压缩包内容
[root@localhost ~]# zcat file1.gz
#加-d选项解压压缩包
[root@localhost ~]# gzip -d file1.gz
当需要让某个文件不生效时,我们就可以使用gzip把文件打成压缩包。
zip打包与压缩
使用zip命令可以对文件进行压缩打包,解压则需要使用unzip命令
使用之前我们可以which zip先查看是否安装zip命令工具,如果没有我们需要先安装才可以使用。
安装zip和unzip工具命令:
yum install zip unzip -y
语法格式:
zip 选项 参数
示例:
#压缩文件filename为zip包
[root@localhost ~]# zip filename.zip filename
#压缩目录为zip包,-r递归
[root@localhost ~]# zip -r dir.zip dir/
#查看zip压缩包是否完整
[root@localhost ~]# zip -T filename.zip
test of filename.zip OK
#-l选项不解压压缩包查看包内的内容
[root@localhost ~]# unzip -l filename.zip
[root@localhost ~]# unzip -t filename.zip
#解压.zip压缩包,默认解压到当前目录
[root@localhost ~]# unzip filename.zip
#解压.zip压缩包至当前目录下的data/目录,-d选项指定目录解压
[root@localhost ~]# unzip filename.zip -d ./data/
tar打包与压缩
tar是Linux下最常用的压缩与解压缩了,支持文件和目录的压缩归档。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。
语法格式:tar 选项 参数
常用选项:
选项 | 作用/th> |
c | 创建新的归档文件 |
x | 对归档文件解包 |
t | 列出归档文件里的文件列表 |
v | 输出命令的归档或解包的过程 |
f | 指定包文件名,多参数f写最后 |
z | 使用gzip压缩归档后的文件(.tar.gz) |
j | 使用bzip2压缩归档后的文件(.tar.bz2) |
J | 使用xz压缩归档后的文件(tar.xz) |
C | 指定解压目录位置 |
X | 排除多个文件(写入需要排除的文件名称) |
h | 打包软链接 |
--exclude | 在打包的时候写入需要排除文件或目录 |
这些个选项还可以都结合在一起使用,我们经常会用到的一些有:
czf 打包tar.gz格式
cjf 打包tar.bz2格式
cJf 打包tar.xz格式
zxf 解压tar.gz格式
jxf 解压tar.bz格式
xf 自动选择解压模式
tf 查看压缩包内容
示例:
- 将文件或目录进行打包并压缩
#以.gzip方式打包并压缩
[root@localhost ~]# tar czf test.tar.gz test/ test2/
#以bz2方式压缩
[root@localhost ~]# tar cjf test.tar.bz2 test/ test2/
#打包链接文件,打包链接文件的真实文件
[root@localhost ~]# tar czfh local.tar.gz /etc/rc.local
#打包/tmp目录下所有文件
[root@localhost ~]# find /tmp/ -type f | xargs tar czf tmp.tar.gz
我们经常会看到执行压缩命令后会出现一行tar: Removing leading `/’ from member names
这个的意思是 从成员名中删除开头的“/”,就是tar打包压缩会文件会自动帮助去除 / 目录,避免解压时覆盖原有系统文件
- 排除文件, 并打包压缩
#打包压缩etc/目录,但是排除services文件
[root@localhost ~]# tar czf etc.tar.gz --exclude=etc/services etc/
#排除多个文件,使用两次--exclude(这样需要排除的文件过多的话很麻烦)
[root@localhost ~]# tar czf oo2.tar.gz --exclude=etc/sysconfig/network-scripts/ifcfg-lo
--exclude=etc/sysconfig/network-scripts/ifcfg-eth0 /etc
#将需要排除的文件写入文件中,指定需要排除的文件列表,最后进行压缩打包
[root@localhost ~]#cat ~/pc.txt
etc/sysconfig/network-scripts/ifcfg-eth0
etc/services
etc/rc.local
[root@localhost ~]#tar czfX oo3.tar.gz pc.txt /etc/
- 查看压缩文件内容
[root@localhost ~]# tar tf local.tar.gz
etc/rc.local
- 解压缩文件
#解压至当前文件
[root@localhost ~]# tar xf test.tar.gz
#-C指定解压目录
[root@localhost ~]# tar xf /etc/local.tar.gz -C /tmp