首頁 > 軟體

Linux下文件的壓縮和打包命令

2020-06-16 18:02:14

首先要弄清兩個概念:打包和壓縮。
打包是指將一大堆檔案或目錄變成一個總的檔案;
壓縮則是將一個大的檔案通過一些壓縮演算法變成一個小檔案。
為什麼要區分這兩個概念呢?這源於Linux中很多壓縮程式只能針對一個檔案進行壓縮,這樣當你想要壓縮一大堆檔案時,你得先將這一大堆檔案先打成一個包(tar命令),然後再用壓縮程式進行壓縮(gzip bzip2命令)。

Linux下最常用的打包程式就是tar了,使用tar程式打出來的包我們常稱為tar包,tar包檔案的命令通常都是以.tar結尾的。生成tar包後,就可以用其它的程式來進行壓縮。

1. gzip工具
語法: gzip [-d#] filename 其中#為1-9的數位,預設壓縮級別為6
只能壓縮檔案
-f    強制覆蓋壓縮檔案
-1    快速壓縮檔案
-9    最佳壓縮檔案
-v    視覺化壓縮
gzip  filename 生成filename.gz 原始檔消失
解壓 gzip -d filename.gz 解壓後,壓縮檔案也會消失
zcat  用來檢視gzip壓縮的包

最佳壓縮和解壓縮

[root@localhost tmp]# gzip -9 a.img 
[root@localhost tmp]# ls -lk
-rw-------. 1 root  root 16507 Mar 26 13:00 a.img.gz
[root@localhost tmp]# gzip -d a.img.gz 
[root@localhost tmp]# ls -lk
-rw-------. 1 root  root 16568 Mar 26 13:00 a.img

可以同時壓縮多個檔案 gzip file1 file2 file3
1234 [root@localhost tmp]# gzip a.img dhcp-4.3.1.tar 
[root@localhost tmp]# ls -l
-rw-------. 1 root root 16902566 Mar 26 13:00 a.img.gz
-rwxr-xr-x. 1 root root  8987298 Mar 26 12:58 dhcp-4.3.1.tar.gz

視覺化壓縮
[root@localhost tmp]# gzip -v dhcp-4.3.1.tar 
dhcp-4.3.1.tar: 33.5% -- replaced with dhcp-4.3.1.tar.gz

2. bzip2壓縮工具
語法: bzip2 [-dz] filename
壓縮時,可以加 “-z” 也可以不加,都可以壓縮檔案
bzip2 filename  生成filename.bz2 原始檔消失
不支援壓縮目錄

-d    強制解壓縮檔案
-z    強制壓縮檔案,預設可以不用加
-k    壓縮時保留原檔案
-f    解壓縮時強制覆蓋原檔案
-v    視覺化壓縮,顯示節省空間百分比,壓縮前後大小;
bzip2 -d  filename.bz2 解壓後壓縮檔案消失
可以使用 bzcat 檢視bz2的壓縮後的檔案內容

可以同時壓縮多個檔案bzip2 file1 file2

[root@localhost tmp]# bzip2 a.img 
[root@localhost tmp]# ls -l
-rw-------. 1 root root 17025434 Mar 26 13:00 a.img.bz2
[root@localhost tmp]# bzip2 -v dhcp-4.3.1.tar 
  dhcp-4.3.1.tar:  1.538:1,  5.200 bits/byte, 35.00% saved, 13506560 in, 8779359 out.

壓縮時保留原始檔,解壓縮時強制覆蓋原始檔

[root@localhost tmp]# bzip2 -k a.img 
[root@localhost tmp]# ls -lh
-rw-------. 1 root root  17M Mar 26 13:00 a.img
-rw-------. 1 root root  17M Mar 26 13:00 a.img.bz2
[root@localhost tmp]# bzip2 -dfv a.img.bz2 
  a.img.bz2: done
[root@localhost tmp]# ls -lh
drwxr-xr-x. 2 root root 4.0K Mar 27 13:38 abc
-rw-------. 1 root root  17M Mar 26 13:00 a.img

3. xz
用法同gzip和bzip2
xz  filename    生成filename.xz
不支援壓縮目錄

-v    視覺化壓縮,顯示壓縮所用的進度和時間;
xz -d filename.xz  進行解壓縮
xcat    用來檢視xz壓縮的包的內容

可以同時壓縮多個目錄,解壓縮多個目錄,並視覺化顯示;
[root@localhost tmp]# xz a.img dhcp-4.3.1.tar 
[root@localhost tmp]# ls -lh
-rw-------. 1 root root  17M Mar 26 13:00 a.img.xz
-rwxr-xr-x. 1 root root 8.0M Mar 26 12:58 dhcp-4.3.1.tar.xz
[root@localhost tmp]# xz -dv a.img.xz dhcp-4.3.1.tar.xz 
a.img.xz (1/2)
  100.0 %                16.1 MiB / 16.2 MiB = 0.997                         
dhcp-4.3.1.tar.xz (2/2)
  100.0 %              8,146.0 KiB / 12.9 MiB = 0.618

4. zip及unzip
zip是壓縮工具,unzip是解壓縮工具,需要安裝才可以使用。

安裝zip的命令: yum install -y zip
安裝unzip的命令: yum install -y unzip
-v    視覺化顯示壓縮過程,顯示壓縮前後檔案大小和壓縮百分比;
-d    解壓縮時用,指定解壓縮到哪個目錄下;
不可以同時解壓縮多個檔案,解壓縮不支援-v視覺化;

壓縮檔案: zip  filename.zip  filename
壓縮目錄: zip -r  dir.zip dir/
解壓縮zip壓縮包: unzip  filename.zip


壓縮abc目錄為ab.zip,解壓縮ab.zip並指定壓縮到ab目錄下,abc整個目錄解壓縮到ab目錄下;
[root@localhost tmp]# zip -r ab.zip abc/
  adding: abc/ (stored 0%)
  adding: abc/passwd (deflated 58%)
[root@localhost tmp]# unzip ab.zip -d ab
Archive:  ab.zip
  creating: ab/abc/
  inflating: ab/abc/passwd         
  inflating: ab/abc/a.img           
[root@localhost tmp]# ls -lh
drwxr-xr-x. 3 root root 4.0K Mar 27 15:30 ab
drwxr-xr-x. 2 root root 4.0K Mar 27 15:27 abc
-rw-r--r--. 1 root root  17M Mar 27 15:25 ab.zip
[root@localhost tmp]# ls -l ab/
drwxr-xr-x. 2 root root 4096 Mar 27 15:24 abc
[root@localhost tmp]# ls -l ab/abc/
-rw-------. 1 root root 16965117 Mar 27 15:24 a.img
-rw-r--r--. 1 root root    1019 Mar 27 13:23 passwd

可以使用file name.gz    name.zip    查詢是哪一種壓縮格式壓縮的檔案;

5. tar打包工具

可以打包目錄也可以打包檔案
語法:tar [-zjxcvfpP] filename
打包: tar -cvf  test.tar  test 其中test是檔案或目錄
-c    表示建立包
-v    視覺化打包的過程
-f    壓縮時跟 “-f 檔名”,意思是壓縮後的檔名為filename, 解壓時跟 “-f 檔名”,意思是解壓filename. 請注意,如果是多個引數組合的情況下帶有 “-f”,請把 “-f” 寫到最後面。
-z    打包的同時使用gzip壓縮
-j    打包的同時使用bzip2壓縮
-J    打包的同時使用xz壓縮
-C    指定解壓後的目錄
tar -C /tmp/ -xvf 1.tar    解壓到指定目錄/tmp裡面

檢視包內容: tar -tf  test.tar
-t    檢視tar包裡面的檔案
同樣使用 tar -tf 檢視壓縮的包: tar -tf 1.tar.gz 或者tar -tf 1.tar.bz2

解包: tar -xvf  test.tar
-x    解包或者解壓縮
不管是打包還是解包,原來的檔案是不會刪除的,但它會覆蓋當前已經存在的檔案或者目錄。

打包abc目錄為abc.tar,檢視abc.tar的內容,解壓abc.tar包;

[root@localhost tmp]# ls -l
drwxr-xr-x. 2 root root    4096 Mar 27 15:27 abc
-rw-------. 1 root root 16965117 Mar 26 13:00 a.img
-rwxr-xr-x. 1 root root 13506560 Mar 26 12:58 dhcp-4.3.1.tar
[root@localhost tmp]# tar -cvf abc.tar abc
abc/
abc/passwd
abc/a.img
[root@localhost tmp]# tar -tf abc.tar 
abc/
abc/passwd
abc/a.img
[root@localhost tmp]# tar -xvf abc.tar 
abc/
abc/passwd
abc/a.img

同時打包多個檔案到11.tar
[root@localhost tmp]# tar -cvf 11.tar abc a.img dhcp-4.3.1.tar abc.tar 
abc/
abc/passwd
abc/a.img
a.img
dhcp-4.3.1.tar
abc.tar
[root@localhost tmp]# ls -lh
-rw-r--r--. 1 root root  62M Mar 27 16:33 11.tar


打包的同時使用gzip壓縮: tar -czvf  1.tar.gz 1 其中1可以是檔案也可以是目錄
-z 表示打包同時使用gzip壓縮
解壓.tar.gz的壓縮包: tar -xzvf 1.tar.gz
使用bzip2壓縮: tar -cjvf 1.tar.bz2 1
-j 表示打包同時使用bzip2壓縮
解壓.tar.bz2: tar -xjvf 1.tar.bz2


使用gzip壓縮並打包,使用bzip2壓縮並打包,對比2種壓縮格式,bzip2壓縮後的檔案更小;使用xz壓縮,壓縮效果最佳!壓縮後檔案最小!
原始檔為13M,gzip壓縮後為8.6M,bzip2壓縮後為8.4M,xz壓縮後為8.0M;

[root@localhost tmp]# ls -lh
-rwxr-xr-x. 1 root root  13M Mar 26 12:58 dhcp-4.3.1.tar
[root@localhost tmp]# tar -czvf gzip.tar.gz dhcp-4.3.1.tar dhcp-4.3.1.tar
[root@localhost tmp]# tar -cjvf bzip2.tar.bz2 dhcp-4.3.1.tar dhcp-4.3.1.tar
[root@localhost tmp]# ls -lh
-rw-r--r--. 1 root root 8.4M Mar 27 16:54 bzip2.tar.bz2
-rwxr-xr-x. 1 root root  13M Mar 26 12:58 dhcp-4.3.1.tar
-rw-r--r--. 1 root root 8.6M Mar 27 16:54 gzip.tar.gz
[root@localhost tmp]# xz dhcp-4.3.1.tar 
[root@localhost tmp]# ls -lh
-rw-r--r--. 1 root root 8.4M Mar 27 16:54 bzip2.tar.bz2
-rwxr-xr-x. 1 root root 8.0M Mar 26 12:58 dhcp-4.3.1.tar.xz
-rw-r--r--. 1 root root 8.6M Mar 27 16:54 gzip.tar.gz

有時我們會看到一種字尾名為 .tar.xz的檔案,這種壓縮包是用xz工具壓縮,

打包壓縮成 xz格式壓縮包:tar -cJvf dir.tar.xz  dir/
解壓的方法為:tar -Jxvf  file.tar.xz

可以在打包的時候,排除某些檔案或者目錄新增引數    --exclude
tar --exclude 1.txt  -czvf 1.tar.gz  dir/
排除多個檔案或者目錄: tar --exclude "目錄名" --exclude "*檔名"  -czvf 1.tar.gz  dir/

打包root目錄到1.tar.gz 並排除目錄裡面的install開頭的檔案;

[root@localhost ~]# tar -czvf 1.tar.gz --exclude "install*" /root/

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-04/116335.htm


IT145.com E-mail:sddin#qq.com