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

`


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM