linux文件压缩打包
文件压缩打包
1.压缩包格式
windows常见格式:
.zip
.rar
.7z
.tar
linux常见格式:
.zip
.tar
.tar.gz
.gz
.bz
.xz
.bz2
## 如果要让windows和linux能够互相使用的压缩工具,建议使用.zip的格式
2.压缩包的作用
1.文件和目录太大,需要压缩传输
2.节省磁盘空间占用率
3.节省网络传输带宽消耗
4.网络传输更加快速
3.压缩格式以及命令
格式 | 命令 |
---|---|
.zip | zip |
.gz | gzip |
.tar | tar |
.tar.gz | tar,gzip |
4.压缩命令—gzip
安装gzip:yum install -y gzip
语法:
gzip [选项] 文件名
-r:递归压缩,只能目录下的文件,不能压缩目录
-d:解压压缩包
特性:
1.压缩文件之后,源文件不存在
2.只能压缩文件,不能压缩目录
3.压缩后,压缩包的位置不会改变,和源文件的位置一样
4.压缩后可以用zcat查看文件里的内容
5.一个压缩包中只会有一个文件
6.解压后压缩包消失,只有源文件
5.压缩命令—zip
安装压缩工具zip:yum install -y zip
安装解压工具unzip:yum install -y unzip
语法:
zip [选项] 压缩包的名字 文件
-r:递归压缩
特性:
1.压缩文件后,源文件不会消失
2.可以指定压缩后文件的保存路径
3.可以压缩目录,也可以压缩文件,也可以指定多个文件一起压缩
4.压缩目录时,如果不加-r选项时,压缩后只是一个空目录,目录下面的文件不会存在
5.解压后,压缩包不会消失,如果同一个目录下出现同名文件则会询问是否覆盖
5.1.解压命令—unzip
语法:
unzip [选项] 压缩包名
-l:不会解压,只会查看压缩包里有哪些文件存在
-d:指定解压的路径
6.压缩命令—tar
tar命令本身是归档
语法:
tar 选项 压缩包名 文件
c:归档
f:指定压缩包的名字
z:使用gzip把归档之后的文件再进行压缩
v:显示压缩或解压的过程
x:解压归档的文件
C:指定解压的路径
t:查看压缩包里的文件
j:使用bzip2压缩文件(需要安装:yum install -y bzip2)
J:压缩成格式为.xz的压缩包
X:排除指定的文件,不让它进行压缩,需要将排除的文件加入到一个新的文件中
h:打包软链接(如果软链接文件是相对路径,那么不加h打包出来的文件会失效)
P:压缩时带绝对路径,解压时也要带绝对路径解压
--hard-dereference:打包硬链接文件
--exclude:排除指定的文件,只能单个排除
特性:
1.压缩文件后,源文件存在
2.目录和文件都可以进行压缩
3.可以指定压缩包的位置
4.可以查看压缩包里的文件,不能看文件的内容
5.一个压缩包里可以有多个文件或目录
6.解压后,压缩包还会存在,压缩时可以指定源文件的位置
7.有一个万能解压命令'xf',可以解压任意格式的压缩包
# 注:
# 1.tar命令在解压文件时,如果目录下有同名文件时,不会询问,直接覆盖
# 2.tar命令在打包文件时,会自动删除绝对路径的'/'
# 3.压缩文件时尽量使用相对路径,可以cd到需要打包目录或文件的上级目录
# 4.压缩或解压文件都要配合选项'f'一起使用
7.tar企业案列
7.1.数据库物理备份
1.基础环境准备:
1.1. 安装数据库:yum install mariadb-server
1.2. 开启数据库:systemctl start mariadb
1.3. 创建一个目录存放压缩后的mysql:mkdir /data
2.mysql物理备份及恢复
2.1. 查看数据库
[root@localhost /]# cd /var/lib/mysql
[root@localhost /var/lib/mysql]# ll
total 28700
-rw-rw----. 1 mysql mysql 16384 Apr 19 16:40 aria_log.00000001
-rw-rw----. 1 mysql mysql 52 Apr 19 16:40 aria_log_control
-rw-rw----. 1 mysql mysql 18874368 Apr 19 16:40 ibdata1
-rw-rw----. 1 mysql mysql 5242880 Apr 19 16:40 ib_logfile0
-rw-rw----. 1 mysql mysql 5242880 Apr 19 16:40 ib_logfile1
drwx------. 2 mysql mysql 4096 Apr 19 16:40 mysql
srwxrwxrwx. 1 mysql mysql 0 Apr 19 16:40 mysql.sock
drwx------. 2 mysql mysql 4096 Apr 19 16:40 performance_schema
drwx------. 2 mysql mysql 6 Apr 19 16:40 test
2.2. 备份数据库到/data下
[root@localhost /var/lib]# tar zcf /data/mysql.tgz mysql
tar: mysql/mysql.sock: socket ignored
[root@localhost /var/lib]# ll /data
total 572
-rw-r--r--. 1 root root 582570 Apr 19 17:50 mysql.tgz
2.3. 删除数据库里的test
[root@localhost /var/lib/mysql]# ll
total 28700
-rw-rw----. 1 mysql mysql 16384 Apr 19 16:40 aria_log.00000001
-rw-rw----. 1 mysql mysql 52 Apr 19 16:40 aria_log_control
-rw-rw----. 1 mysql mysql 18874368 Apr 19 16:40 ibdata1
-rw-rw----. 1 mysql mysql 5242880 Apr 19 16:40 ib_logfile0
-rw-rw----. 1 mysql mysql 5242880 Apr 19 16:40 ib_logfile1
drwx------. 2 mysql mysql 4096 Apr 19 16:40 mysql
srwxrwxrwx. 1 mysql mysql 0 Apr 19 16:40 mysql.sock
drwx------. 2 mysql mysql 4096 Apr 19 16:40 performance_schema
drwx------. 2 mysql mysql 6 Apr 19 16:40 test
[root@localhost /var/lib/mysql]# rm -rf test
[root@localhost /var/lib/mysql]# ll
total 28700
-rw-rw----. 1 mysql mysql 16384 Apr 19 16:40 aria_log.00000001
-rw-rw----. 1 mysql mysql 52 Apr 19 16:40 aria_log_control
-rw-rw----. 1 mysql mysql 18874368 Apr 19 16:40 ibdata1
-rw-rw----. 1 mysql mysql 5242880 Apr 19 16:40 ib_logfile0
-rw-rw----. 1 mysql mysql 5242880 Apr 19 16:40 ib_logfile1
drwx------. 2 mysql mysql 4096 Apr 19 16:40 mysql
srwxrwxrwx. 1 mysql mysql 0 Apr 19 16:40 mysql.sock
2.4. 恢复数据库
先关闭数据库:systemctl stop mariadb
在恢复数据库:
[root@localhost /var/lib]# tar xf /data/mysql.tgz
[root@localhost /var/lib]# ll mysql/
total 28700
-rw-rw----. 1 mysql mysql 16384 Apr 19 16:40 aria_log.00000001
-rw-rw----. 1 mysql mysql 52 Apr 19 16:40 aria_log_control
-rw-rw----. 1 mysql mysql 18874368 Apr 19 16:40 ibdata1
-rw-rw----. 1 mysql mysql 5242880 Apr 19 16:40 ib_logfile0
-rw-rw----. 1 mysql mysql 5242880 Apr 19 16:40 ib_logfile1
drwx------. 2 mysql mysql 4096 Apr 19 16:40 mysql
drwx------. 2 mysql mysql 4096 Apr 19 16:40 performance_schema
drwx------. 2 mysql mysql 6 Apr 19 16:40 test
7.2 传输海量小文件
文件传输可以用cp命令,将/etc目录全部复制到/tmp下,例:
cp -a /etc /tmp
如果这个etc里的小文件特别多的话,会过多的占用磁盘IO,所以就可以用tar压缩来减少文件的传输,例:
tar czf -(不取压缩包名) /etc | tar xzf - -C /tmp
# 压缩/etc目录再解压到/tmp下
7.3 网络传输海量小文件
1.常规方式:
# 传输etc目录到另一台终端的/tmp目录下
scp -r /etc root@10.0.0.100:/tmp
[root@localhost ~]# ll /tmp/
total 0
[root@localhost ~]# ll /tmp
total 12
drwxr-xr-x. 85 root root 8192 Apr 19 18:51 etc
2.建议方法:
2.1 需要安装nc:yum install -y nc
2.2 需要关闭接收方的防火墙:systemctl stop firewalld.service
2.3 在接收方的终端上开个端口用来解压发送方发送的目录到/tmp下:nc -l 8888 |tar xzf - -C /tmp
2.4 最后在发送方压缩etc目录通过接收方的端口进行传输:
tar czf - /etc | nc 10.0.0.200 8888
`