第二十四章 Linux系统打包压缩详解
一、压缩概述
1.压缩包含义
就是一个特殊的文件,将多个文件或者目录压缩成一个特殊的文件
2.为什么要用压缩包
1.减少占用的空间
2.加快传输的速度
3.windows和linux常见压缩类型
windows:
.zip .rar
linux:
.zip .gz .tar.gz
ps:如果要想Windows和linux中的压缩包互相使用,建议使用.zip种类的压缩包
4.在Linux中压缩包的类型
.zip #根据zip命令进行打包压缩的
.gz #通过gzip命令进行压缩 只压缩文件,也会删除源文件
.bz2 #通过bzip进行压缩, 只压缩文件,也会删除源文件
.tar.gz #使用tar命令归档打包,然后使用gzip命令进行压缩
.tar.bz2 #使用tar命令归档打包,然后使用bzip命令进行压缩
二、压缩与解压文件-unzip
1.安装
[root@jindada ~]# yum install -y zip unzip
2.压缩文件命令-zip
2.1 含义
zip命令的功能是用于压缩文件,解压命令为unzip。通过zip命令可以将文件打包成.zip格式的压缩包,里面会附含文件的名称、路径、创建时间、上次修改时间等等信息,与tar命令相似。
语法格式:zip 参数 文件
2.2 常见参数
| -q | 不显示指令执行过程 |
|---|---|
| -r | 递归处理,将指定目录下的所有文件和子目录一并处理 |
| -z | 替压缩文件加上注释 |
| -v | 显示指令执行过程或显示版本信息 |
| -d | 更新压缩包内文件 |
| -n<字尾字符串> | 不压缩具有特定字尾字符串的文件 |
3.解压缩zip格式文件-unzip
3.1 含义
unzip命令用于解压缩zip格式文件,虽然Linux系统中更多的使用tar命令进行对压缩包的管理工作,但有时也会收到同Windows系统常用的.zip和.rar格式的压缩包文件,unzip格式便派上了用场。直接使用unzip命令解压缩文件后,压缩包内原有的文件会被提取并输出保存到当前工作目录下。
语法格式:unzip [参数] 压缩包
3.2 常用参数
| -l | 显示压缩文件内所包含的文件 |
|---|---|
| -v | 执行时显示详细的信息 |
| -c | 将解压缩的结果显示到屏幕上,并对字符做适当的转换 |
| -n | 解压缩时不要覆盖原有的文件 |
| -j | 不处理压缩文件中原有的目录路径 |
4.常见示例
[root@jindada ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
针对文件进行压缩打包
[root@jindada ~]# zip services.zip services
adding: services (deflated 80%)
[root@jindada ~]# ll
total 792
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
-rw-r--r-- 1 root root 136227 Jul 29 09:06 services.zip
压缩目录时不加选项,只压缩目录本身
[root@jindada ~]# zip etc.zip /etc
adding: etc/ (stored 0%)
[root@jindada ~]# ll
total 796
-rw-r--r-- 1 root root 158 Jul 29 09:07 etc.zip
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
-rw-r--r-- 1 root root 136227 Jul 29 09:06 services.zip
显示压缩文件内所包含的文件
[root@jindada ~]# unzip -l etc.zip
Archive: etc.zip
Length Date Time Name
--------- ---------- ----- ----
0 07-29-2020 08:56 etc/
--------- -------
0 1 file
解压指定目录
[root@jindada ~]# unzip etc.zip
Archive: etc.zip
creating: etc/
[root@jindada ~]# ll
total 796
drwxr-xr-x 2 root root 6 Jul 29 08:56 etc
-rw-r--r-- 1 root root 158 Jul 29 09:07 etc.zip
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
-rw-r--r-- 1 root root 136227 Jul 29 09:06 services.zip
[root@jindada ~]# ll etc
total 0
压缩目录和目录下的文件
[root@jindada ~]# zip -r etc.zip /etc
[root@jindada ~]# ll -h
total 13M
-rw-r--r-- 1 root root 12M Jul 29 09:10 etc.zip
-rw-r--r-- 1 root root 655K Jul 29 08:45 services
-rw-r--r-- 1 root root 134K Jul 29 09:06 services.zip
[root@jindada ~]# du -sh /etc
31M /etc
查看压缩包里面的文件
[root@jindada ~]# unzip -l etc.zip
静默输出
[root@jindada ~]# zip -rq etc1.zip /etc
[root@jindada ~]# ll
total 24976
-rw-r--r-- 1 root root 12380952 Jul 29 09:13 etc1.zip
-rw-r--r-- 1 root root 12380952 Jul 29 09:10 etc.zip
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
-rw-r--r-- 1 root root 136227 Jul 29 09:06 services.zip
解压文件
[root@jindada ~]# unzip etc.zip
静默解压文件,将文件解压到指定的目录下面
[root@jindada ~]# unzip -q etc.zip -d /opt/
[root@jindada ~]# ll /opt/
total 12
drwxr-xr-x 85 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 0 Jul 28 12:09 file9
三、压缩和解压文件-gzip
1.含义
zip命令来自于英文单词gunzip的缩写,其功能是用于压缩和解压文件。gzip是一款使用广泛的压缩工具,文件经过压缩后一般会以.gz后缀结尾,与tar命令合用后即为.tar.gz后缀。
据统计,gzip命令对文本文件的压缩比率通常能达到60%~70%,压缩后可以很好的提升存储空间的使用率,还能够在网络传输文件时减少等待时间。
语法格式:gzip [参数] 文件
2.常用参数
| -a | 使用ASCII文字模式 |
|---|---|
| -d | 解开压缩文件 |
| -f | 强行压缩文件 |
| -l | 列出压缩文件的相关信息 |
| -c | 把压缩后的文件输出到标准输出设备,不去更动原始文件 |
| -r | 递归处理,将指定目录下的所有文件及子目录一并处理 |
| -q | 不显示警告信息 |
3.常见示例
将指定的文件进行压缩,压缩包默认会以“原文件名.gz”保存到当前工作目录下,原文件会被自动删除
[root@jindada ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
[root@jindada ~]# gzip services
[root@jindada ~]# ll
total 136
-rw-r--r-- 1 root root 136088 Jul 29 08:45 services.gz
# 使用zcat命令查看gzip压缩的文件内容
[root@jindada ~]# zcat services.gz
解压指定的压缩包文件,并显示解压过程。解压后的文件会保存在当前工作目录下,压缩包会被自动删除
[root@jindada ~]# gzip -dv services.gz
services.gz: -18.2% -- replaced with services
显示指定文件的压缩信息
[root@jindada ~]# gzip -l services
compressed uncompressed ratio uncompressed_name
40 11 -18.2% services
[root@jindada ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
将目录下的所有都进行压缩处理
[root@jindada ~]# gzip -r /etc
# 解压目录下的所有压缩包
[root@jindada ~]# gzip -rd /etc
四、压缩和解压文件-bzip2
1.含义
Linux系统中bzip2命令的英文是“bunzip2”,即.bz2文件格式的压缩程序; bzip2命令系统默认是没有安装的,需要安装bzip2库才可以使用此命令。
bzip2命令采用新的压缩演算法,压缩效果比传统的LZ77/LZ78压缩演算法来得好。若没有加上任何参数,bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始的文件。
语法格式:bzip2 [参数] 文件系统
2.安装
[root@jindada ~]# yum install -y bzip2
3.常用参数
| -c | 将压缩与解压缩的结果送到标准输出 |
|---|---|
| -d | 执行解压缩 |
| -f | bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,请使用此参数 |
| -k | bzip2在压缩或解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数 |
| -s | 降低程序执行时内存的使用量 |
| -t | 测试.bz2压缩文件的完整性 |
| -v | 压缩或解压缩文件时,显示详细的信息 |
| -z | 强制执行压缩 |
4.常用示例
压缩文件
[root@jindada ~]# bzip2 services
[root@jindada ~]# ll
total 124
-rw-r--r-- 1 root root 123932 Jul 29 08:45 services.bz2
解压文件
# 解压
[root@jindada ~]# bzip2 -d services.bz2
[root@jindada ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 08:45 services
检查文件完整性
[root@jindada ~]# bzip2 -t services.bz2
查看bzip2压缩的文件
[root@jindada ~]# bzcat services.bz2
五、压缩和解压文件-tar
1.含义
tar命令的功能是用于压缩和解压缩文件,能够制作出Linux系统中常见的.tar、.tar.gz、.tar.bz2等格式的压缩包文件。对于RHEL7、CentOS7版本以后的系统,解压时可以不加压缩格式参数(如z或j),系统能自动进行分析并解压。
把要传输的文件先进行压缩再进行传输,能够很好的提高工作效率,方便分享。
语法格式:tar 参数 文件或目录
2.常用参数:
| -A | 新增文件到以存在的备份文件 |
|---|---|
| -B | 设置区块大小 |
| -c | 建立新的备份文件 |
| -C <目录> | 仅压缩指定目录里的内容或解压缩到指定目录 |
| -d | 记录文件的差别 |
| -x | 从归档文件中提取文件 |
| -xf | 解压指定的压缩包 |
| -t | 列出备份文件的内容 |
| -tvf | 查看某个压缩包内文件信息(无需解压) |
| -z | 通过gzip指令压缩/解压缩文件,文件名最好为*.tar.gz |
| -Z | 通过compress指令处理备份文件 |
| -f | 指定压缩包的名称 |
| -czf | 打包压缩 tar.gz格式的压缩包 |
| -cjf | 打包压缩 tar.bz2格式的压缩包 |
| -cJf | 打包压缩 tar.xz格式的压缩包 |
| -v | 显示指令执行过程 |
| -r | 添加文件到已经压缩的文件 |
| -u | 添加改变了和现有的文件到已经存在的压缩文件 |
| -j | 通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2 |
| -v | 显示操作过程 |
| -l | 文件系统边界设置 |
| -k | 保留原有文件不覆盖 |
| -m | 保留文件不被覆盖 |
| -w | 确认压缩文件的正确性 |
| -p | 保留原来的文件权限与属性 |
| -P | 使用文件名的绝对路径,不移除文件名称前的“/”号 |
| -N <日期格式> | 只将较指定日期更新的文件保存到备份文件里 |
| -X | 指定排除文件的列表文件 |
| -- -exclude=<范本样式> | 指定排除的文件 |
| --exclude-from= | 指定排除文件的列表 |
| -- -remove-files | 归档/压缩之后删除源文件 |
3.常见示例
使用gzip压缩格式对某个目录进行打包操作,压缩包规范后缀为.tar.gz
[root@jindada ~]# ll
total 656
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
[root@jindada ~]# tar czf services.tar.gz services
[root@jindada ~]# ll
total 792
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
[root@jindada ~]# tar czf etc.tar.gz /etc
tar: Removing leading `/' from member names #删根的操作是正常的
[root@jindada ~]# ll
total 10952
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
使用bzip2压缩格式对某个目录进行打包操作,压缩包规范后缀为.tar.bz2
[root@jindada ~]# tar cjf services.tar.bz2 services
[root@jindada ~]# ll
total 916
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
使用xz压缩格式对某个目录进行打包操作,压缩包规范后缀为.tar.xz
[root@jindada ~]# tar cJf services.tar.xz services
[root@jindada ~]# ll
total 1016
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
-rw-r--r-- 1 root root 100640 Jul 29 09:49 services.tar.xz
查看某个压缩包内文件信息(无需解压)
[root@jindada ~]# tar tvf services.tar.gz
-rw-r--r-- root/root 11 2022-11-03 16:15 services
解压某个压缩包到当前工作目录
[root@jindada ~]# tar xf services.tar.gz
[root@jindada ~]# ll
total 10952
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
-rw-r--r-- 1 root root 100640 Jul 29 09:49 services.tar.xz
[root@jindada ~]# tar xf etc.tar.gz
[root@jindada ~]# ll
total 10964
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
-rw-r--r-- 1 root root 100640 Jul 29 09:49 services.tar.xz
[root@jindada ~]# tar cjf etc.tar.bz2 /etc
tar: Removing leading `/' from member names
[root@jindada ~]# tar cJf etc.tar.xz /etc
tar: Removing leading `/' from member names
[root@jindada ~]# ll
total 26808
-rw-r--r-- 1 root root 8994047 Jul 29 10:01 etc.tar.bz2
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
-rw-r--r-- 1 root root 7238084 Jul 29 10:01 etc.tar.xz
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
-rw-r--r-- 1 root root 124166 Jul 29 09:48 services.tar.bz2
-rw-r--r-- 1 root root 136200 Jul 29 09:48 services.tar.gz
-rw-r--r-- 1 root root 100640 Jul 29 09:49 services.tar.xz
[root@jindada ~]# tar xf etc.tar.bz2 #解压的时候,自动识别压缩包的格式
[root@jindada ~]# ll
total 26820
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 8994047 Jul 29 10:01 etc.tar.bz2
-rw-r--r-- 1 root root 10171684 Jul 29 09:56 etc.tar.gz
-rw-r--r-- 1 root root 7238084 Jul 29 10:01 etc.tar.xz
解压某个压缩包到指定目录
[root@jindada ~]# tar xf etc.tar.gz -C /opt/
[root@jindada ~]# ll /opt/
total 668
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
使用gzip压缩格式对某个目录进行打包操作,显示压缩过程,压缩包规范后缀为.tar.gz
# 打包显示压缩过程
[root@jindada ~]# tar czvf etc.tar.gz /etc
# 解压显示压缩过程
[root@jindada ~]# tar xvf etc.tar.gz
4.打包避免删根操作
4.1 错误现象
[root@jindada ~]# ll /bin -d
lrwxrwxrwx. 1 root root 7 Jul 6 02:13 /bin -> usr/bin
[root@jindada ~]# tar czf bin.tar.gz /bin
tar: Removing leading `/' from member names
[root@jindada ~]# ll
total 9952
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:04 etc.tar.gz
[root@jindada ~]# tar xf bin.tar.gz
[root@jindada ~]# ll
total 9952
lrwxrwxrwx 1 root root 7 Jul 6 02:13 bin -> usr/bin
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:04 etc.tar.gz
[root@jindada ~]# tar czhf bin1.tar.gz /bin
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@jindada ~]# ll
total 36880
lrwxrwxrwx 1 root root 7 Jul 6 02:13 bin -> usr/bin
-rw-r--r-- 1 root root 27573768 Jul 29 10:16 bin1.tar.gz
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:04 etc.tar.gz
4.2 使用相对路径打包
[root@jindada ~]# cd /
[root@jindada /]# tar czf /root/etc1.tar.gz etc
[root@jindada /]# ll /root
total 46852
dr-xr-xr-x 2 root root 20480 Jul 29 08:58 bin
-rw-r--r-- 1 root root 27573768 Jul 29 10:16 bin1.tar.gz
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:19 etc1.tar.gz
-rw-r--r-- 1 root root 10171684 Jul 29 10:04 etc.tar.gz
# 真实生产环境打包场景
[root@jindada ~]# cd / && tar czf /root/etc3.tar.gz etc && cd -
/root
[root@jindada ~]# ll
total 581012
dr-xr-xr-x 2 root root 20480 Jul 29 08:58 bin
-rw-r--r-- 1 root root 27573768 Jul 29 10:16 bin1.tar.gz
-rw-r--r-- 1 root root 110 Jul 29 10:14 bin.tar.gz
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 10171684 Jul 29 10:19 etc1.tar.gz
-rw-r--r-- 1 root root 347209728 Jul 29 10:22 etc2.tar.gz
-rw-r--r-- 1 root root 10171684 Jul 29 10:22 etc3.tar.gz
4.3 使用绝对路径打包
#使用绝对路径打包
[root@jindada ~]# tar czPf etc4.tar.gz /etc
#使用绝对路经解压
[root@jindada ~]# tar xPf etc4.tar.gz
[root@jindada ~]# cat /etc/services >> /opt/services
[root@jindada ~]# ll /opt/
total 1744
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 158 Jul 29 10:28 hosts
-rw-r--r-- 1 root root 1340586 Jul 29 10:29 services
[root@jindada ~]# tar xPf opt.tar.gz
[root@jindada ~]# ll /opt/
total 672
drwxr-xr-x 77 root root 8192 Jul 29 08:56 etc
-rw-r--r-- 1 root root 158 Jul 29 10:28 hosts
-rw-r--r-- 1 root root 670293 Jul 29 09:47 services
5.排除不需要打包的文件
[root@jindada ~]# tar czf etc1.tar.gz /etc
tar: Removing leading `/' from member names
[root@jindada ~]# ll
total 9936
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
[root@jindada ~]# ll /etc/services
-rw-r--r-- 1 root root 670293 Jun 7 2013 /etc/services
[root@jindada ~]# tar czf etc2.tar.gz --exclude=/etc/services /etc
tar: Removing leading `/' from member names
[root@jindada ~]# ll
total 19740
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
[root@jindada ~]# tar tf etc2.tar.gz | grep services
etc/firewalld/services/
6.排除多个文件
[root@jindada ~]# tar czf etc3.tar.gz --exclude=/etc/services --exclude=/etc/passwd /etc
tar: Removing leading `/' from member names
[root@jindada ~]# ll
total 29544
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:54 etc3.tar.gz
[root@jindada ~]# tar tf etc3.tar.gz | grep -E 'services|passwd'
etc/security/opasswd
etc/passwd-
etc/pam.d/passwd
etc/firewalld/services/
[root@jindada ~]# tar czf etc4.tar.gz --exclude=/etc/{services,passwd} /etc
tar: Removing leading `/' from member names
[root@jindada ~]# ll
total 39348
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:54 etc3.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:55 etc4.tar.gz
[root@jindada ~]# cat paichu.list
/etc/fstab
/etc/group
/etc/hosts
/etc/passwd
/etc/services
[root@jindada ~]# tar czfX etc5.tar.gz paichu.list /etc
tar: Removing leading `/' from member names
[root@jindada ~]# ll
total 49152
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:54 etc3.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:55 etc4.tar.gz
-rw-r--r-- 1 root root 10033927 Jul 29 10:58 etc5.tar.gz
-rw-r--r-- 1 root root 59 Jul 29 10:57 paichu.list
[root@jindada ~]# tar tf etc5.tar.gz | grep -Ew 'fstab|group|hosts|passwd|services'
etc/security/group.conf
etc/group-
etc/passwd-
etc/hosts.allow
etc/hosts.deny
etc/pam.d/passwd
etc/iproute2/group
etc/firewalld/services/
[root@jindada ~]# tar czf etc6.tar.gz --exclude-from=paichu.list /etc
tar: Removing leading `/' from member names
[root@jindada ~]# ll
total 58952
-rw-r--r-- 1 root root 10171949 Jul 29 10:51 etc1.tar.gz
-rw-r--r-- 1 root root 10036635 Jul 29 10:52 etc2.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:54 etc3.tar.gz
-rw-r--r-- 1 root root 10035297 Jul 29 10:55 etc4.tar.gz
-rw-r--r-- 1 root root 10033927 Jul 29 10:58 etc5.tar.gz
-rw-r--r-- 1 root root 10033927 Jul 29 11:01 etc6.tar.gz
-rw-r--r-- 1 root root 59 Jul 29 10:57 paichu.list
六、查看压缩文件的内容-zcat
1.含义
zcat命令来自于英文词组“zip cat”的缩写,其功能是用于查看压缩文件的内容。zcat命令可以在不真正解压文件的情况下查看到文件内容,类似于gunnzip -c命令组合的作用。
语法格式:zcat [参数] 压缩包
2.常用参数
| -S | 当后缀不是标准压缩包后缀时使用此选项 |
|---|---|
| -c | 将文件内容写到标注输出 |
| -d | 执行解压缩操作 |
| -l | 显示压缩包中文件的列表 |
| -L | 显示软件许可信息 |
| -q | 禁用警告信息 |
| -r | 在目录上执行递归操作 |
| -t | 测试压缩文件的完整性 |
| -V | 显示指令的版本信息 |
| -1 | 更快的压缩速度 |
| -9 | 更高的压缩比 |
3.常用示例
在不解压文件的情况下,显示某个压缩包内文件的内容
[root@jindada ~]# zcat services.tar.gz
在不解压文件的情况下,显示多个压缩包内文件的内容
[root@jindada ~]# zcat services.tar.gz services.gz
查看指定文件的压缩信息(压缩后大小,未压缩大小,压缩率,文件名)
[root@jindada ~]# zcat -l services.tar.gz
compressed uncompressed ratio uncompressed_name
129 10240 98.9% services.tar
七、tar与find命令的综合运用
[root@jindada ~]# tar czf log1.tar.gz `find /var/log/ -type f -name "*.log"`
tar: Removing leading `/' from member names
[root@jindada ~]# tar czf log2.tar.gz $(find /var/log/ -type f -name "*.log")
tar: Removing leading `/' from member names
[root@jindada ~]# find /var/log/ -type f -name "*.log" -exec tar czf log3.tar.gz {} \;
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
[root@jindada ~]# find /var/log/ -type f -name "*.log" | xargs tar czf log4.tar.gz
tar: Removing leading `/' from member names
[root@jindada ~]# ll
total 916
-rw-r--r-- 1 root root 309155 Jul 29 11:09 log1.tar.gz
-rw-r--r-- 1 root root 309155 Jul 29 11:09 log2.tar.gz
-rw-r--r-- 1 root root 356 Jul 29 11:10 log3.tar.gz
-rw-r--r-- 1 root root 309155 Jul 29 11:10 log4.tar.gz
[root@jindada ~]# tar tf log1.tar.gz
var/log/tuned/tuned.log
var/log/audit/audit.log
var/log/anaconda/anaconda.log
var/log/anaconda/X.log
var/log/anaconda/program.log
var/log/anaconda/packaging.log
var/log/anaconda/storage.log
var/log/anaconda/ifcfg.log
var/log/anaconda/ks-script-3PCKae.log
var/log/anaconda/journal.log
var/log/boot.log
var/log/vmware-vmsvc.log
var/log/vmware-network.8.log
var/log/vmware-network.5.log
var/log/vmware-network.2.log
var/log/vmware-network.7.log
var/log/vmware-network.4.log
var/log/vmware-network.1.log
var/log/test.log
var/log/yum.log
var/log/vmware-network.9.log
var/log/nginx/error.log
var/log/nginx/access.log
var/log/vmware-network.6.log
var/log/vmware-network.3.log
var/log/vmware-network.log
[root@jindada ~]# tar tf log3.tar.gz
var/log/vmware-network.log
结论:
当使用-exec时,把find查找的文件是进行一个个赋值给{}的
xargs 把find命令查找出来的文件统一的赋值给了后面

浙公网安备 33010602011771号