一. 压缩包格式

windows:
.zip
.tar
.tar.gz
.gz
--------------------------
.rar
.7z
.bz
.bz2
.xz

为什么使用压缩

1.文件或目录太大,需要压缩传输
2.以后学的服务安装包都需要解压

压缩格式及命令

格式

Linux命令

.zip

zip

.gz

gzip

.tar

tar

.tar.gz

tar,gzip

二. 压缩命令-gzip

## 1.安装gzip命令
[root@Quanyi ~]# yum install -y gzip

## 2.gzip命令使用
gzip:普通文件名
-r:递归压缩

## 特性:
1.压缩文件后,源文件不存在
2.只能压缩文件,不能压缩目录
3.压缩后,压缩包的位置在源文件的目录下
4.压缩后可以直接查看文件内容 zcat
5.一个压缩包中,只会有一个文件
6.解压后,压缩包没了,只剩源文件

# 3.解压命令
gzip -d 压缩包名

##举例:
[root@Quanyi ~]# gzip /tmp/ceshi
[root@Quanyi ~]# ll /tmp
total 32
-rw-rw-r--. 1 jiangsu jiangsu 46 Apr 13 21:55 ceshi.gz

[root@Quanyi ~]# zcat /tmp/ceshi
1234
qwer
asdf
zxcv

[root@Quanyi ~]# gzip -d /tmp/ceshi
[root@Quanyi /tmp]# ll
-rw-rw-r--. 1 jiangsu jiangsu 20 Apr 13 21:55 ceshi

三. 压缩命令-zip

## 1.安装zip和unzip命令
[root@Quanyi ~]# yum install -y zip
[root@Quanyi ~]# yum install -y unzip

## 2.zip命令
zip 压缩包名

[root@Quanyi ~]#zip txt.zip 1.txt 2.txt 3.txt
压缩包名 需要放入压缩包的文件

## 特性
1.压缩文件后,源文件存在
2.可以指定压缩后保存的路径
3.可以压缩目录,也可以压缩文件,也可以指定多个文件一起压缩
4. 压缩目录需要加选项,如果不加,压缩后,只有一个空目录,没有里面的文件
5.解压后,压缩包不会消失,如果同一目录下出现同名文件则会询问是否要覆盖

## 选项
-r:递归压缩,包括目录下的所有文件

## 解压命令
unzip 压缩包名

#举例:
[root@Quanyi ~]# zip /a.sh.zip a.sh
[root@Quanyi ~]# ll /
total 36
drwxr-xr-x. 2 root root 6 Apr 1 19:02 123
-rw-r--r--. 1 root root 301 Apr 18 15:47 a.sh.zip

## 压缩并指定位置
[root@Quanyi ~]# zip /opt/1.txt.zip a.sh
adding: a.sh (deflated 21%)
[root@Quanyi ~]# ll /opt
total 9856
-rw-r--r--. 2 root root 25 Mar 29 17:09 1.txt
-rw-r--r--. 1 root root 301 Apr 18 15:52 1.txt.zip
-rw-r--r--. 1 root root 10082639 Jul 28 2019 dzq.mp3

# -r:递归压缩,包括目录下的所有文件
[root@Quanyi ~]# zip -r 11.zip /tmp/etc
[root@Quanyi ~]# ll
total 24480
-rw-r--r--. 1 root root 12352171 Apr 18 15:20 11.zip

[root@Quanyi ~]# unzip 11.zip
[root@Quanyi ~]# ll
drwxr-xr-x. 3 root root 17 Apr 18 15:23 tmp

[root@Quanyi ~/tmp]# ll
total 12
drwxr-xr-x. 83 root root 8192 Apr 30 2022 etc

# -l:查看压缩包里面都有哪些文件
[root@Quanyi ~]# unzip -l test.zip
Archive: test.zip
Length Date Time Name
--------- ---------- ----- ----
20 04-13-2022 21:55 tmp/ceshi
--------- -------
20 1 file

# -d:指定解压路径
[root@Quanyi ~]# unzip test.zip -d /tmp
[root@Quanyi ~]# ll /tmp
drwxr-xr-x. 2 root root 19 Apr 18 15:30 tmp
[root@Quanyi /tmp/tmp]# ll
total 4
-rw-rw-r--. 1 root root 20 Apr 13 21:55 ceshi

四. 压缩命令-tar

tar命令本身是归档

## 选项:
c:归档
f:指定包名
z:使用gzip把归档文件压缩
v:显示压缩/解压的过程
x:解压归档文件
C:指定解压的位置(路径)
t:查看压缩包里的文件都有哪些
j:使用bzip压缩文件
J:压缩成.xz包
X:排除指定的文件
h:打包软链接(如果软链接文件是相对路径,那么不加h打包出来的文件会失效)
P:压缩时带绝对路径,解压时按绝对路径解压。
--exclude:排除指定文件
--hard-dereference:打包硬链接文件

##举例:zcf
[root@Quanyi ~]# tar zcf tmp1.tar.gz /tmp
[root@Quanyi ~]# ll
-rw-r--r--. 1 root root 10158254 Apr 18 16:06 tmp1.tar.gz

1)先归档
[root@Quanyi ~]# tar cf tmp1.tar /tmp
2)再使用gzip压缩
[root@Quanyi ~]# gzip tmp1.tar

## X举例:
[root@Quanyi ~]# touch {1..4}txt
[root@Quanyi ~]# ll
total 0
-rw-r--r--. 1 root root 0 Apr 18 21:02 1txt
-rw-r--r--. 1 root root 0 Apr 18 21:02 2txt
-rw-r--r--. 1 root root 0 Apr 18 21:02 3txt
-rw-r--r--. 1 root root 0 Apr 18 21:02 4txt

[root@Quanyi ~]# tar zcf qy.gzp 1txt 2txt 3txt 4txt
[root@Quanyi ~]# ll
total 4
-rw-r--r--. 1 root root 0 Apr 18 21:02 1txt
-rw-r--r--. 1 root root 0 Apr 18 21:02 2txt
-rw-r--r--. 1 root root 0 Apr 18 21:02 3txt
-rw-r--r--. 1 root root 0 Apr 18 21:02 4txt
-rw-r--r--. 1 root root 126 Apr 18 21:02 qy.gzp
-rw-r--r--. 1 root root 126 Apr 18 21:02 qy.gzp

[root@Quanyi ~]# cat >>lqy.txt<<EOF
> /root/1txt
> /root/2txt
> EOF

[root@Quanyi ~]# tar zcf qq.tar.gz -X lqy.txt /root/
tar: Removing leading `/' from member names
[root@Quanyi ~]# ll
total 24
-rw-r--r--. 1 root root 0 Apr 18 21:02 1txt
-rw-r--r--. 1 root root 0 Apr 18 21:02 2txt
-rw-r--r--. 1 root root 0 Apr 18 21:02 3txt
-rw-r--r--. 1 root root 0 Apr 18 21:02 4txt
-rw-r--r--. 1 root root 24 Apr 18 21:03 lqy.txt
-rw-r--r--. 1 root root 15747 Apr 18 21:04 qq.tar.gz
-rw-r--r--. 1 root root 126 Apr 18 21:02 qy.gzp

[root@Quanyi ~]# tar tf qq.tar.gz
root/
root/.bash_logout
root/.bash_profile
root/.cshrc
root/.tcshrc
root/.bash_history
root/.bashrc
root/.tset.txt.swp
root/.viminfo
root/.vimrc
root/.rnd
root/3txt
root/4txt
root/qy.gzp
root/lqy.txt
root/qq.tar.gz

## --exclude举例:
[root@Quanyi ~]# tar zcf tmp3.tgz --exclude=abc /tmp
[root@Quanyi ~]# cat abc
123
[root@Quanyi ~]# ll
-rw-r--r--. 1 root root 10158227 Apr 18 16:50 tmp3.tgz

## 特性
1.压缩文件后,源文件存在
2.目录和文件都可以压缩
3.压缩后,压缩包的位置可以指定任意目录
4.可以查看压缩包里有哪些文件,但是查看不了文件内容
5.一个压缩包中,可以有多个文件或目录
6.解压后,压缩包还在,源文件也可以随意指定路径 -C
7.使用zcf压缩,zxf解压
使用jcf压缩,jxf解压
使用Jcf压缩,Jxf解压
# 万能解压命令:xf

## 注意:
1.tar命令在解压文件时,如果有文件名冲突,则不会询问,直接覆盖
2.tar命令,在打包时,会自动删除绝对路径的"/"
3.以后打包,尽量使用相对路径,cd到需要打包目录或文件的上级目录

tar企业案例

1. 数据库物理备份

# 基础环境准备
[root@Quanyi ~]# yum install mariadb-server
[root@Quanyi ~]# systemctl start mariadb
[root@Quanyi ~]# mkdir /backup

# 案例1 mysql物理备份及恢复
[root@Quanyi ~]# tar cJf /backup/mysql.tar.xz /var/lib/mysql
[root@Quanyi ~]# tar xf /backup/mysql.tar.xz -C /

# 案例2 mysql物理备份及恢复
[root@Quanyi ~]# cd /var/lib/mysql
[root@Quanyi ~]# tar cJf /backup/mysql.tar.xz *
[root@Quanyi mysql]# tar tf /backup/mysql.tar.xz
[root@Quanyi mysql]# tar xf /backup/mysql.tar.xz -C /var/lib/mysql

2. 传输海量小文件

## 文件传输(如果etc下小文件特别多,很占用磁盘IO)
[root@Quanyi ~]# cp -a /etc /tmp
## 以下方式减少小文件的传输
[root@Quanyi ~]# tar czf - /etc | tar xzf - -C /tmp

3. 网络传输海量小文件

#常规方法
[root@Quanyi ~]# scp -r /etc root@10.0.0.200:/tmp
#建议方法:
#接收B主机, 需要监听端口
[root@hostB ~]# systemctl stop firewalld.service
[root@hostB ~]# nc -l 8888 |tar xzf - -C /tmp
#发送方A主机
[root@hostA ~]# tar -czf - /etc | nc 10.0.0.200 8888
tar: Removing leading `/' from member names