压缩打包

Linux中常见的压缩包格式有哪些?

格式 压缩工具
.zip zip压缩工具
.gz gzip压缩工具,只能压缩文件,会删除源 文件(通常配合tar使用)
.bz2 bzip2压缩工具,只能压缩文件,会删除源 文件(通常配合tar使用)
.tar.gz 先使用tar命令归档打包,然后使用gzip压缩
.tar.gz 先使用tar命令归档打包,然后使用gzip压缩

为什么要使用压缩

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

压缩命令gzip

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

# 2.gzip命令使用
[root@web ~]# ll
total 4
-rw-------. 1 root root 1448 Apr  4 06:49 anaconda-ks.cfg
[root@web ~]# file anaconda-ks.cfg 
anaconda-ks.cfg: ASCII text  # text格式的普通文件

[root@web ~]# gzip anaconda-ks.cfg 
[root@web ~]# ll
total 4
-rw-------. 1 root root 793 Apr  4 06:49 anaconda-ks.cfg.gz
[root@web ~]# file anaconda-ks.cfg.gz 
anaconda-ks.cfg.gz: gzip compressed data, was "anaconda-ks.cfg", from Unix, last modified: Tue Apr  4 06:49:30 2021 # gzip格式文件

## 选项
-r:递归压缩
[root@web ~]# ll
total 0
-rw-r--r--. 1 root root 0 Jul  6 06:55 1
-rw-r--r--. 1 root root 0 Jul  6 06:55 2
-rw-r--r--. 1 root root 0 Jul  6 06:55 3
-rw-r--r--. 1 root root 0 Jul  6 06:55 4
[root@web ~]# gzip -r ./*
[root@web ~]# ll
total 16
-rw-r--r--. 1 root root 22 Jul  6 06:55 1.gz
-rw-r--r--. 1 root root 22 Jul  6 06:55 2.gz
-rw-r--r--. 1 root root 22 Jul  6 06:55 3.gz
-rw-r--r--. 1 root root 22 Jul  6 06:55 4.gz

-d:解压命令
[root@web ~]# ll
total 16
-rw-r--r--. 1 root root 22 Jul  6 06:55 1.gz
-rw-r--r--. 1 root root 22 Jul  6 06:55 2.gz
-rw-r--r--. 1 root root 22 Jul  6 06:55 3.gz
-rw-r--r--. 1 root root 22 Jul  6 06:55 4.gz
[root@web ~]# gzip -d ./*
[root@web ~]# ll
total 0
-rw-r--r--. 1 root root 0 Jul  6 06:55 1
-rw-r--r--. 1 root root 0 Jul  6 06:55 2
-rw-r--r--. 1 root root 0 Jul  6 06:55 3
-rw-r--r--. 1 root root 0 Jul  6 06:55 4

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

解压命令zip

[root@web ~]# yum install -y zip
[root@web ~]# yum install -y unzip

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

[root@web mnt]# zip 1.zip 1 2 3 4 5
  adding: 1 (stored 0%)
  adding: 2 (stored 0%)
  adding: 3 (stored 0%)
  adding: 4 (stored 0%)
  adding: 5 (stored 0%)
[root@web mnt]# ll
total 4
-rw-r--r-- 1 root root   0 Jul  6 14:47 1
-rw-r--r-- 1 root root 672 Jul  6 14:47 1.zip
-rw-r--r-- 1 root root   0 Jul  6 14:47 2
-rw-r--r-- 1 root root   0 Jul  6 14:47 3
-rw-r--r-- 1 root root   0 Jul  6 14:47 4
-rw-r--r-- 1 root root   0 Jul  6 14:47 5

# 压缩并指定位置
[root@web mnt]# zip /opt/1.zip 1 2 3 4 5
  adding: 1 (stored 0%)
  adding: 2 (stored 0%)
  adding: 3 (stored 0%)
  adding: 4 (stored 0%)
  adding: 5 (stored 0%)
[root@web mnt]# ll /opt
total 112
-rw-r--r-- 2 root root       8 Jul  3 16:01 123.txt
-rw-r--r-- 1 root root       8 Jul  3 12:02 1.abc
lrwxrwxrwx 1 root root       4 Jul  3 15:44 1.sh -> 1.sh
-rw-r--r-- 1 root root     672 Jul  6 14:49 1.zip

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

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

[root@web mnt]# zip -r 111.zip /opt
  adding: opt/ (stored 0%)
  adding: opt/1.abc (stored 0%)
  adding: opt/123.txt (stored 0%)
  adding: opt/disk (deflated 100%)
  adding: opt/1.zip (stored 0%)

  # 解压命令 目录内没有同名文件
  unzip 压缩包名
[root@web mnt]# unzip 111.zip 
Archive:  111.zip
   creating: opt/
 extracting: opt/1.abc               
 extracting: opt/123.txt             
  inflating: opt/disk                
 extracting: opt/1.zip 
 [root@web mnt]# ll
total 16
-rw-r--r-- 1 root root    0 Jul  6 14:47 1
-rw-r--r-- 1 root root 9619 Jul  6 14:50 111.zip
-rw-r--r-- 1 root root  672 Jul  6 14:47 1.zip
-rw-r--r-- 1 root root    0 Jul  6 14:47 2
-rw-r--r-- 1 root root    0 Jul  6 14:47 3
-rw-r--r-- 1 root root    0 Jul  6 14:47 4
-rw-r--r-- 1 root root    0 Jul  6 14:47 5
drwxr-xr-x 5 root root  130 Jul  6 14:49 opt

# 目录里也同名文件会询问
[root@web mnt]# unzip 1.zip 
Archive:  1.zip
replace 1? [y]es, [n]o, [A]ll, [N]one, [r]ename:
# [y]是, [n]不, [A]全替换, [N]不做操作, [r]ename:

## 选项
-l:查看压缩包里面都有哪些文件
[root@web mnt]# unzip -l 1.zip 
Archive:  1.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  07-06-2023 14:47   1
        0  07-06-2023 14:47   2
        0  07-06-2023 14:47   3
        0  07-06-2023 14:47   4
        0  07-06-2023 14:47   5
---------                     -------
        0                     5 files

-d:指定解压路径
[root@web mnt]# unzip 1.zip -d /opt
Archive:  1.zip
 extracting: /opt/1                  
 extracting: /opt/2                  
 extracting: /opt/3                  
 extracting: /opt/4                  
 extracting: /opt/5
 [root@web mnt]# ll /opt
total 0
-rw-r--r-- 1 root root       0 Jul  6 14:47 1
-rw-r--r-- 1 root root       0 Jul  6 14:47 2
-rw-r--r-- 1 root root       0 Jul  6 14:47 3
-rw-r--r-- 1 root root       0 Jul  6 14:47 4
-rw-r--r-- 1 root root       0 Jul  6 14:47 5

压缩命令tar

tar命令本身是归档

## 选项:
c:归档
f:指定包名
z:使用gzip把归档文件压缩
[root@web mnt]# tar zcf 1.tgz 1
[root@web mnt]# ll
total 20
-rw-r--r-- 1 root root  101 Jul  6 15:00 1.tgz

t:查看压缩包里的文件都有哪些
[root@web mnt]# tar tf 1.tgz 
1
## zcf 相当于进行了
1.归档
2.再使用gzip压缩
----------------------------------------------------

v:显示压缩/解压的过程
[root@web mnt]# tar zcvf 1.tar.gz 1 2 3 4 5
1
2
3
4
5

x:解压归档文件
[root@web mnt]# ll
total 24
-rw-r--r-- 1 root root 9619 Jul  6 14:50 111.zip
-rw-r--r-- 1 root root  136 Jul  6 15:11 1.tar.gz
-rw-r--r-- 1 root root  101 Jul  6 15:00 1.tgz
-rw-r--r-- 1 root root  672 Jul  6 14:47 1.zip
drwxr-xr-x 5 root root  130 Jul  6 14:49 opt
[root@web mnt]# tar xf 1.tgz 
[root@web mnt]# ll
total 24
-rw-r--r-- 1 root root    0 Jul  6 14:47 1
-rw-r--r-- 1 root root 9619 Jul  6 14:50 111.zip
-rw-r--r-- 1 root root  136 Jul  6 15:11 1.tar.gz
-rw-r--r-- 1 root root  101 Jul  6 15:00 1.tgz
-rw-r--r-- 1 root root  672 Jul  6 14:47 1.zip
drwxr-xr-x 5 root root  130 Jul  6 14:49 opt

大C:指定解压的位置 (路径)
[root@web mnt]# tar xf 1.tar.gz -C opt/
[root@web mnt]# ll opt
total 0
-rw-r--r-- 1 root root 0 Jul  6 14:47 1
-rw-r--r-- 1 root root 0 Jul  6 14:47 2
-rw-r--r-- 1 root root 0 Jul  6 14:47 3
-rw-r--r-- 1 root root 0 Jul  6 14:47 4
-rw-r--r-- 1 root root 0 Jul  6 14:47 5

j:将文件压成bzip2压缩文件(需要先安装bzip2命令)(此类文件解压需要 jxf 因为z是解压gzip文件的)
J:将文件压成压缩成.xz包

X:排除指定的文件
[root@web opt]# tar zcf 1.tgz 1 2 3 4 -X 5
[root@web opt]# ll
total 4
-rw-r--r-- 1 root root   0 Jul  6 14:47 1
-rw-r--r-- 1 root root 130 Jul  6 15:18 1.tgz
-rw-r--r-- 1 root root   0 Jul  6 14:47 2
-rw-r--r-- 1 root root   0 Jul  6 14:47 3
-rw-r--r-- 1 root root   0 Jul  6 14:47 4
-rw-r--r-- 1 root root   0 Jul  6 14:47 5
[root@web opt]# tar tf 1.tgz 
1
2
3
4

h:打包软链接(如果软链接文件是相对路径,那么不加h打包出来的文件会失效)
P:压缩时带绝对路径,解压时按绝对路径解压。
--exclude:排除指定文件
--hard-dereference:打包硬链接文件
## 特性
1.压缩文件后,源文件存在
2.目录和文件都可以压缩
3.压缩后,压缩包的位置可以指定任意目录
[root@wudidesangege ~]\ tar zcf /usr/local/wyk.tar.gz /etc /opt /tmp
4.可以查看压缩包里有哪些文件,但是查看不了文件内容
[root@wudidesangege ~]\ tar tf /usr/local/wyk.tar.gz
5.一个压缩包中,可以有多个文件或目录
6.解压后,压缩包还在,源文件也可以随意指定路径 -C
7.使用zcf压缩,zxf解压

使用jcf压缩,jxf解压

使用Jcf压缩,Jxf解压

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

拓展

数据库物理备份

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

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

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

传输海量小文件

## 文件传输(如果etc下小文件特别多,很占用磁盘IO)
[root@localhost lib]# cp -a /etc /tmp

## 以下方式减少小文件的传输
[root@localhost lib]# tar czf - /etc | tar xzf - -C /tmp

网络传输海量小文件

#常规方法
[root@localhost ~]# 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