2021-05-12 14:32:11
Linux下文件的壓縮和打包命令
首先要弄清兩個概念:打包和壓縮。
打包是指將一大堆檔案或目錄變成一個總的檔案;
壓縮則是將一個大的檔案通過一些壓縮演算法變成一個小檔案。
為什麼要區分這兩個概念呢?這源於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
相關文章