常見的壓縮命令
在Linux環境中,壓縮文件的擴展名大多是[.tar,.tar.gz,.tgz,.gz,.Z,.bz2,*.xz],支持的壓縮命令還是非常多,壓縮技術也不相同,不同壓縮命令彼此之間不能互相壓縮和解壓縮文件了。所以在得到一個壓縮文件時要知道使用過那種壓縮命令製作的,使用相應的命令就可以解壓了。
擴展名 命令
*.Z compress
*.zip zip
*.gz gzip
*.bz2 bzip2
*.xz zx
*.tar tar打包程序,並沒有壓縮
*.tar.gz tar打包後,使用gzip壓縮
*.tar.bz2 tar打包後,使用bzip2壓縮
*.tar.xz tar打包後,使用zx壓縮
現在常見的是gzip、bzip2和最新的xz,像compress之類已經很少使用了。通常這些壓縮命令僅針對一個文件來壓縮和解壓縮,所有在壓縮之前會使用打包tar了。
1.gzip
gzip可以說是應用最廣的壓縮命令了,gzip可以解開compress,zip與gzip等軟件所壓縮的文件。gzip建立的壓縮文件一般使用*.gz的文件名,默認壓縮後源文件就沒有了。
參數 作用
-a 使用ASCII文字模式
-d 解開壓縮文件
-f 強行壓縮文件
-l 列出壓縮文件的相關信息
-c 把壓縮的數據輸出到屏幕上,可使用重定向來處理數據
-r 遞歸處理,將指定目錄下的所有文件及子目錄一併處理
-q 不顯示警告信息
-v 可顯示壓縮和解壓縮時的詳細信息
-# #是數字,代表壓縮等級,-1最快,但是壓縮比差,-9最慢,壓縮比最好,默認是-6
1.1複製一個文件例子到桌面。
[root@linux Desktop]# cp /etc/services .
[root@linux Desktop]# ls -lh
總用量 656K
-rw-r--r--. 1 root root 655K 5月 17 18:50 services
1.2可以看到service文件大小有655K,壓縮service文件。
[root@linux Desktop]# gzip services
[root@linux Desktop]# ls -lh
總用量 136K
-rw-r--r--. 1 root root 133K 5月 17 18:50 services.gz
1.3壓縮後的文件變成133K了,解壓縮該文件。
[root@linux Desktop]# gzip -d services
[root@linux Desktop]# ls -lh
總用量 656K
-rw-r--r--. 1 root root 655K 5月 17 19:39 services
1.4保留原文件壓縮
[root@linux Desktop]# gzip -c services > services.gz
[root@linux Desktop]# ls -lh
總用量 792K
-rw-r--r--. 1 root root 655K 5月 17 19:39 services
-rw-r--r--. 1 root root 133K 5月 17 19:45 services.gz
1.5使用zcat、zmore、zless查看壓縮後文件的內容
[root@linux Desktop]# zmore services.gz
------> services.gz <------
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
以下省略...
1.6使用zgrep查找文件內容,不需要解壓後再查找。
[root@linux Desktop]# zgrep -n http services.gz
14:# http://www.iana.org/assignments/port-numbers
89:http 80/tcp www www-http # WorldWideWeb HTTP
90:http 80/udp www www-http # HyperText Transfer Protocol
以下省略...
2.bzip2
gzip取代了compress並提供了更好的壓縮比,那麼bzip2是爲了取代gzip並提供更佳的壓縮比,bzip2的用法幾乎和gzip相同。
參數 作用
-c 將壓縮與解壓縮的結果送到標準輸出
-d 執行解壓縮
-f bzip2在壓縮或解壓縮時,若輸出文件與現有文件同名,預設不會覆蓋現有文件。若要覆蓋,請使用此參數
-k bzip2在壓縮或解壓縮後,保留原始文件
-s 降低程序執行時內存的使用量
-t 測試.bz2壓縮文件的完整性
-v 壓縮或解壓縮文件時,顯示詳細的信息
-z 強制執行壓縮
-# 與gzip一樣,壓縮等級,-1最快,-9最佳
2.1使用bzip2壓縮services文件和gzip對比。
[root@linux Desktop]# bzip2 -v services
services: 5.409:1, 1.479 bits/byte, 81.51% saved, 670293 in, 123932 out.
[root@linux Desktop]# ls -lh
總用量 916K
-rw-r--r--. 1 root root 655K 5月 17 19:39 services
-rw-r--r--. 1 root root 122K 5月 17 19:39 services.bz2
-rw-r--r--. 1 root root 133K 5月 17 19:45 services.gz
2.2使用bzcat、bzmore、bzless查看壓縮後文件的內容。
[root@linux Desktop]# bzcat services.bz2
省略內容...
[root@linux Desktop]# bzmore services.bz2
省略內容...
[root@linux Desktop]# bzless services.bz2
省略內容...
2.3使用bzgrep查找文件內容,不需要解壓後再查找。
[root@linux Desktop]# bzgrep -n http services.gz
14:# http://www.iana.org/assignments/port-numbers
89:http 80/tcp www www-http # WorldWideWeb HTTP
90:http 80/udp www www-http # HyperText Transfer Protocol
以下省略...
2.4解壓縮
[root@linux Desktop]# rm services
rm:是否刪除普通文件 "services"?y
[root@linux Desktop]# bzip2 -d services.bz2
[root@linux Desktop]# ls -hl
總用量 792K
-rw-r--r--. 1 root root 655K 5月 17 19:39 services
-rw-r--r--. 1 root root 133K 5月 17 19:45 services.gz
3.xz
xz是最新的壓縮軟件,壓縮比更高,用法也和gzip和bzip2幾乎相同。
參數 作用
-z, --compress 強制壓縮
-t, --test 測試壓縮文件的完整性
-l, --list 列出有關.xz文件的信息
-k, --keep 保留(不要刪除)輸入文件
-f, --force 強制覆蓋輸出文件和(解)壓縮鏈接
-c, --stdout 寫入標準輸出,不要刪除輸入文件
-# 與gzip一樣,壓縮等級,-1最快,-9最佳,使用7-9之前解壓縮內存使用量考慮在內!
3.1壓縮。
[root@linux Desktop]# xz -v services
services (1/1)
100 % 97.3 KiB / 654.6 KiB = 0.149
[root@linux Desktop]# ls -hl
總用量 360K
-rw-r--r--. 1 root root 122K 5月 17 19:39 services.bz2
-rw-r--r--. 1 root root 133K 5月 17 19:45 services.gz
-rw-r--r--. 1 root root 98K 5月 17 19:39 services.xz
[root@linux Desktop]# xz -l services.xz
Strms Blocks Compressed Uncompressed Ratio Check Filename
1 1 97.3 KiB 654.6 KiB 0.149 CRC64 services.xz
3.2使用xzcat、xzmore、xzless查看壓縮後文件的內容,使用xzgrep查找文件內容。
3.3解壓縮
[root@linux Desktop]# xz -d services.xz
[root@linux Desktop]# ls -lh
總用量 916K
-rw-r--r--. 1 root root 655K 5月 17 19:39 services
-rw-r--r--. 1 root root 122K 5月 17 19:39 services.bz2
-rw-r--r--. 1 root root 133K 5月 17 19:45 services.gz
打包軟件tar
我有過疑問,gzip、bzip2和xz可以壓縮目錄,爲什麼還需要tar打包呢,把所有需要壓縮的文件放在同一個目錄中,壓縮文件夾不就可以了嗎?當查閱資料後才知道,如果壓縮目錄,壓縮軟件會將目錄中所有文件分別進行壓縮。tar可以將多個目錄或文件打包成一個大文件,同時還可以透過gzip、bzip2、xz的支持,將文件同時進行壓縮,就是打包壓縮同時進行。
參數 作用
-c 建立打包文件,可搭配-v查看過程中被打包的文件名
-t 列出打包文件的內容含有哪些文件名
-x 提取文件,可搭配-C提取到指定目錄
-z 通過gzip指令壓縮/解壓縮文件,文件名最好爲*.tar.gz
-j 通過bzip2指令壓縮/解壓縮文件,文件名最好爲*.tar.bz2
-J 通過xz指令壓縮/解壓縮文件,文件名最好爲*.tar.bz2
-v 顯示指令執行過程
-C <目錄> 解壓縮到特定的目錄
-f<備份文件> 指定備份文件
-p 保留原來的文件權限與屬性
-P 使用文件名的絕對路徑,不移除文件名稱前的“/”號
-r 添加文件到已經壓縮的文件
-u 添加改變了和現有的文件到已經存在的壓縮文件
-k 保留原有文件不覆蓋
-m 保留文件不被覆蓋
-N <日期格式> 只將指定日期更新的文件保存到備份文件裏
--exclude=<範本樣式> 排除符合範本樣式的文件
--remove-files 歸檔/壓縮之後刪除源文件
需要注意的是-c,-t,-x三個參數不能同時出現在一個命令中,-z,-j,-J三個參數不能同時出現在一個命令中。簡單使用tar記住下面三個方式即可
壓 縮:tar -czvf 文件名.tar.gz 需要被壓縮的文件或目錄
查 看:tar -tzvf 文件名.tar.gz
解壓縮:tar -xzvf 文件名.tar.gz [-C 指定目錄]
tar並不會自動產生文檔的名稱,需要我們自己定義,所以擴展名就顯得很重要了。如果不加-z,-j,-J三個參數就是打包文件不壓縮,擴展名最好是.tar就可以了。如果是-z就代表使用gzip壓縮,擴展名最好是.tar.gz,因爲gzip會產生.gz的擴展名。同理-j就使用.tar.bz2的擴展名,-J就使用.tar.xz的擴展名了。
備份/etc目錄
這裏命令我沒加參數v不看信息,加了參數p,意思是保留文件原來的權限。
[root@linux Desktop]# tar -czpf etc.tar.gz /etc
tar: 從成員名中刪除開頭的“/”
[root@linux Desktop]# ls -lh
總用量 8.8M
drwxr-xr-x. 2 root root 58 5月 17 22:29 123
-rw-r--r--. 1 root root 387K 5月 17 22:31 456.tar.gz
-rw-r--r--. 1 root root 8.4M 5月 17 23:57 etc.tar.gz
輸完命令立即跳出一條提示:tar: 從成員名中刪除開頭的“/”,這個“/”是根目錄。爲什麼要拿掉根目錄呢?主要是爲了安全,我們備份的數據可能需要解壓後使用的,如果拿掉“/”,那麼會解壓到當前目錄,就是/root/Desktop/etc/*,如果不拿掉“/”呢?解壓後文檔名就是絕對路徑了,這樣備份的etc目錄會被解壓到現有的etc目錄中,覆蓋當前的數據,會產難以預料的後果。
解壓備份
解壓到當前目錄,可以使用-C參數解壓到指定錄下。
[root@linux Desktop]# tar -xzvf etc.tar.gz
解壓單一文件
只解壓etc中的shadow文件,首先先查找文件。
[root@linux Desktop]# tar -tzvf etc.tar.gz | grep shadow
---------- root/root 678 2020-04-30 00:29 etc/gshadow
---------- root/root 1149 2020-04-30 00:29 etc/shadow
---------- root/root 1127 2020-01-13 00:42 etc/shadow-
---------- root/root 667 2020-01-13 00:42 etc/gshadow-
[root@linux Desktop]# tar -xzvf etc.tar.gz etc/shadow
etc/shadow
[root@linux Desktop]# ls etc/
shadow
在解壓單獨的文件之前,要先將之前解壓的etc目錄刪除,不然只會將shadow文件覆蓋一遍,看不出效果。只要知道你想要的文件名稱,就可以單獨解壓出來而不用將整個目錄都解壓了。