Linux文件壓縮


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


免責聲明!

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



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