文件压缩打包

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

`

版权声明:本文为jilei原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zlyj/p/16160302.html