Linux文件压缩
为什么要对文件进行压缩?
- 压缩后的文件会比压缩前的文件小
- 多个文件传输很慢,单个文件传输会很快,同时能节省网络的消耗
Linux常见的压缩包类型
格式 | 命令 |
---|---|
.zip | zip |
.gz | gzip,只能压缩文件,会删除原文件(配合tar使用) |
.bz2 | bzip2,只能压缩文件,会删除原文件(配合tar使用) |
.tar.gz | 先使用tar命令归档打包,然后使用gzip压缩 |
.tar.bz2 | 先使用tar命令归档打包,然后在使用bzio压缩 |
压缩命令gzip
安装gzip命令:
[root@localhost ~]# yum install -y gzip
gzip命令使用:
gzip 普通文件名
选项:
-r:递归压缩
解压命令
gzip -d 压缩包名
#特性:
1.压缩文件后,源文件不存在
2.只能压缩文件,不能压缩目录
3.压缩后,压缩包的位置在源文件的目录下
4.压缩后可以用zcat直接查看文件内容
5.一个压缩包中,只会有一个文件
6.解压后,压缩包没了,只剩下源文件
压缩命令zip
安装zip和unzip命令
[root@localhost ~]# yum install -y zip
[root@localhost ~]# yum install -y unzip
zip命令使用:
zip 压缩包名 文件
[root@localhost ~]# zip txt.zip 1.txt 2.txt 3.txt
|命令 |压缩包名 |需要放入的文件
压缩并指定位置:
[root@localhost ~]# zip /opt/lw.zip 1.txt 2.txt 3.txt 4.txt
选项:
-r:递归压缩,包括目录下的所有文件
[root@localhost ~]# zip -r lw.zip lw
-l:查看压缩包里面都有哪些文件
[root@localhost ~]# unzip -l lw.zip
-d:指定压缩路径
[root@localhost ~]# unzip lw.zip -d /tmp
解压命令:
unzip 压缩包名
[root@localhost ~]# unzip lw.zip
Archive: lw.zipreplace lw/1.txt? [y]es, [n]o, [A]ll, [N]one, [r]enam:A
#特性:
1.压缩文件后,源文件存在
2.可以指定压缩后保存的路径
3.可以压缩目录,也可以压缩文件,也可以指定多个文件一起压缩
4.压缩目录需要加选项,如果不加,压缩后,只有一个空目录,没有里面的文件
5.解压后,压缩包不会消失,如果同一目录下出现同名文件则会询问是否要覆盖
压缩命令tar
tar命令本身是归档
选项:
c:归档
f:指定包名
z:使用gzip把归档文件压缩
v:显示压缩/解压的过程
x:解压归档文件
C:指定解压的位置(路径)
t:查看压缩包里的文件都有哪些
j:使用bzip2压缩文件
J:压缩成.xz包
X:排除指定的文件
h:打包软链接,如果软链接文件是相对路径,不加h选项打包出来的文件会失效
P:压缩时带绝对路径,解压时按绝对路径解压
--exclude:排除指定文件
--hard-dereference:打包硬链接文件
## zcf举例
[root@localhost ~]# tar zcf tmp2.tar.gz /tmp
1)先归档[root@localhost ~]# tar cf tmp2.tar /tmp
2)再使用gzip压缩[root@localhost ~]# gzip tmp2.tar
## X举例
[root@localhost ~]# tar zcf tmp_paichu.tgz -X lw.txt /tmp
[root@localhost ~]# cat lw.txt1.log2.log
## --exclude举例
[root@localhost ~]# tar zcf tmp_exclude2.tgz --exclude=1.log --exclude=2.log/tmp
## 特性
1.压缩文件后,源文件存在
2.目录和文件都可以压缩
3.压缩后,压缩包的位置可以指定任意目录
[root@localhost ~]# tar zcf /usr/local/lw.tar.gz /etc /opt /tmp
4.可以查看压缩包里有哪些文件,但是查看不了文件内容
[root@localhost ~]# tar tf /usr/local/lw.tar.gz
5.一个压缩包中,可以有多个文件或目录
6.解压后,压缩包还在,源文件也可以随意指定路径-C
7.使用zcf压缩,zxf解压 使用jcf压缩,jxf解压 使用Jcf压缩,Jxf解压(万能解压命令:xf)
## 注意:
1.tar命令在解压开文件时,如果有文件名冲突,则不会询问,直接覆盖
2.tar命令,在打包时,会自动删除绝对路径的"/"
3.以后打包,尽量使用相对路径,cd到需要打包目录或文件的上级目录
[root@localhost ~]# cd /
[root@localhost /]# tar zcf /usr/local/src/opt.tgz opt/
tar企业案例
基础环境准备
[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
传输海量小文件
host A /etc (海量小文件) --> host A /tmp本机传输
[root@localhost ~]# tar czf - /etc | tar xzf - -C /tmp
案例4 host A /etc (海量小文件) --> host B /tmp
#常规方法
[root@localhost ~]# scp -r /etc root@192.168.69.113:/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.100 8888
tar: Removing leading `/' from member names
Comments | NOTHING