文件壓縮打包
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
`
