Linux學習-13.文件的壓縮和打包

常見的壓縮命令

在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文件覆蓋一遍,看不出效果。只要知道你想要的文件名稱,就可以單獨解壓出來而不用將整個目錄都解壓了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章