Linux 下常用的歸檔壓縮方式

svoid發表於2015-04-08

很多時候,通過網際網路傳送或接收大檔案和圖片是一件令人頭疼的事。壓縮及解壓縮工具正好可以應對這個問題。下面讓我們快速瀏覽一些可以使得我們的工作更加輕鬆的開源工具。

Tar

Tar 由 Tape archiver(磁帶歸檔器) 衍生而來,最初被用來在磁帶上歸檔和儲存檔案。Tar 是一個 GNU 軟體,它可以壓縮一組檔案(歸檔),或提取它們以及對已有的歸檔檔案進行相關操作。在儲存、備份以及傳輸檔案方面,它是很有用的。在建立歸檔檔案時,Tar 可以保持原有檔案和目錄結構不變。通過 Tar 歸檔的檔案的字尾名為 .tar。

基本用法如下:

a) 建立歸檔 (c / –create)
shell> tar --create --verbose --file=archive.tar sakila-data.sql sakila-schema.sql world-schema.sql 
或
shell> tar cvf archive.tar sakila-data.sql sakila-schema.sql world-schema.sql
sakila-data.sql
sakila-schema.sql
world-schema.sql

shell> ls
archive.tar  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

b) 列出歸檔檔案內容 ( t / –list)
shell> tar tvf archive.tar 
-rw-r--r-- root/root   3231472 2015-04-02 22:59 sakila-data.sql
-rw-r--r-- root/root     23067 2015-04-02 22:59 sakila-schema.sql
-rw-r--r-- root/root    397011 2015-04-02 22:59 world-schema.sql

c) 提取歸檔 (x / –extract)
shell> tar xvf archive.tar

# 從歸檔中提取字尾名為 *.h 的檔案。
tar xvf archive.tar --wildcards '*.h' 

d) 對歸檔檔案進行更新 ( u / –update)
shell> tar uvf archive.tar create.sql 
create.sql

e) 從歸檔中刪除檔案 (–delete)
#從壓縮包archive.tar 中刪除檔案 create.sql
shell> tar --delete -f archive.tar create.sql 
shell> tar tvf archive.tar 
-rw-r--r-- root/root   3231472 2015-04-02 22:59 sakila-data.sql
-rw-r--r-- root/root     23067 2015-04-02 22:59 sakila-schema.sql
-rw-r--r-- root/root    397011 2015-04-02 22:59 world-schema.sql

f) 壓縮選項:

-a, --auto-compress        使用歸檔字尾名來決定壓縮程式
-I, --use-compress-program=PROG
                         通過 PROG 過濾(必須是能接受 -d
                         選項的程式)
-j, --bzip2                通過 bzip2 過濾歸檔
-J, --xz                   通過 xz 過濾歸檔
  --lzip                 通過 lzip 過濾歸檔
  --lzma                 通過 lzma 過濾歸檔
  --lzop
  --no-auto-compress     不使用歸檔字尾名來決定壓縮程式
-z, --gzip, --gunzip, --ungzip   通過 gzip 過濾歸檔
-Z, --compress, --uncompress   通過 compress 過濾歸檔

shell> tar czvf archive.tar.gz *.sql      
shell> tar cjvf archive.tar.bz2 *.sql
shell> tar zxvf archive.tar.gz
shell> tar jxvf archive.tar.bz2

更加具體的使用方法請參考 tar 主頁

Gzip / Gunzip

Gzip 即 GNU zip,它是一個被廣泛用於 Linux 作業系統中的壓縮應用,被其壓縮的檔案的字尾名為*.gz 。

基本用法如下:

a) 壓縮檔案
shell> gzip archive.tar  #單獨每個檔案將壓縮。
shell> ls
archive.tar.gz  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

通常在壓縮完成後,它會將原來的檔案刪除。我們可以使用 -c 選項來保留原來的檔案。
shell> gzip -c archive.tar > archive.tar.gz  #壓縮後保留原有檔案
shell> ls
archive.tar  archive.tar.gz  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

shell> gunzip archive.tar.gz 
shell> ls
archive.tar  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

將一組檔案壓縮到一個單獨的檔案中
shell> cat *.sql | gzip > archive.gz   #壓縮一組檔案
shell> ls
archive.gz  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

b) 檢查壓縮比
被壓縮檔案的壓縮比可以使用 ‘-l’ 選項來進行檢驗。
shell> gzip -l archive.tar.gz    #檢查壓縮率
   compressed        uncompressed  ratio uncompressed_name
       763759             3655680  79.1% archive.tar

c) 解壓檔案
Gunzip 用來解壓檔案,在這裡,原有的(壓縮)檔案在被解壓後同樣會被刪除。使用 -c選項來保留原始檔案。
shell> gzip -d archive.tar.gz  
或 
shell> gunzip archive.tar.gz
shell> ls
archive.gz  archive.tar  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

更多細節可以參考 gzip 主頁 

Bzip2 / Bunzip2

同 gzip 一樣,Bzip2 也是一個壓縮工具,與其他傳統的工具相比,它可以將檔案壓縮到更小,但其缺點為:執行速度比 gzip 慢。

基本用法如下:

a) 壓縮檔案
一般情況下,針對壓縮而言,Bzip2 不用什麼選項,將被壓縮的檔案被傳遞為它的引數。
每個檔案被單獨壓縮,且壓縮檔案以 ‘bz2′ 為字尾名。

shell> bzip2 *.sql
shell> ls
create.sql.bz2  sakila-data.sql.bz2  sakila-schema.sql.bz2  world-schema.sql.bz2

檔案壓縮
使用 ‘-k’ 選項可以使得在壓縮或解壓縮之後保留原有的檔案。
shell> bzip2 -k *.sql    #在壓縮後保留原有檔案
shell>  ls
create.sql      sakila-data.sql      sakila-schema.sql      world-schema.sql
create.sql.bz2  sakila-data.sql.bz2  sakila-schema.sql.bz2  world-schema.sql.bz2

b) 解壓
‘-d’ 選項被用來解壓縮。
shell> bzip2 -d *.bz2
shell> ls
create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

shell> bunzip2 *.bz2
shell> ls
create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql
bunzip2 可以解壓字尾名為 bz2, bz, tbz2 和 tbz 的檔案。帶有 tbz2 和 tbz 的檔案在壓縮後,字尾名將變為’.tar’ 。

7-zip

7-zip 是另一個開源壓縮軟體。它使用 7z 這種新的壓縮格式,並支援高壓縮比。因此,它被認為是比先前提及的壓縮工具更好的軟體。在 Linux 下,可以通過 p7zip 軟體包得到,該軟體包裡包含 3 個二進位制檔案: 7z, 7za 和 7zr,可以參考 p7zip wiki 來了解這三個二進位制檔案之間的不同。歸檔檔案以 .7z 為字尾名。

基本用法如下:

a) 建立歸檔
shell> 7za a -t7z archive.7z *.sql   #建立一個歸檔檔案

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,1 CPU)
Scanning

Creating archive archive.7z

Compressing  create.sql      
Compressing  sakila-data.sql      
Compressing  sakila-schema.sql      
Compressing  world-schema.sql      

Everything is Ok
shell> ls
archive.7z  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

b) 列出歸檔包含檔案
shell> 7za l archive.7z   #列出歸檔中包含的檔案

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,1 CPU)

Listing archive: archive.7z

--
Path = archive.7z
Type = 7z
Method = LZMA
Solid = +
Blocks = 1
Physical Size = 554670
Headers Size = 226

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2015-04-02 23:09:37 ....A            1       554444  create.sql
2015-04-02 22:59:19 ....A      3231472               sakila-data.sql
2015-04-02 22:59:19 ....A        23067               sakila-schema.sql
2015-04-02 22:59:19 ....A       397011               world-schema.sql
------------------- ----- ------------ ------------  ------------------------
                               3651551       554444  4 files, 0 folders

c) 提取歸檔檔案
shell> rm -rf *.sql
shell> 7za e archive.7z 

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,1 CPU)

Processing archive: archive.7z

Extracting  create.sql
Extracting  sakila-data.sql
Extracting  sakila-schema.sql
Extracting  world-schema.sql

Everything is Ok

Files: 4
Size:       3651551
Compressed: 554670

d) 更新歸檔檔案
shell> touch new-file
shell> 7za u archive.7z new-file 

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,1 CPU)

Scanning

Updating archive archive.7z

e) 從歸檔檔案中刪除檔案
shell> 7za d archive.7z new-file  #刪除new-file檔案

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,1 CPU)

Updating archive archive.7z


Everything is Ok

壓縮效果簡單對比

shell> tar cvf archive.tar *.sql 
shell> gzip -c archive.tar > archive.tar.gz
shell> bzip2 -k archive.tar
shell> 7za a -t7z archive.tar.7z archive.tar

shell> time gzip -c archive.tar > archive.tar.gz
real    0m0.253s
user    0m0.158s
sys     0m0.094s

shell> time bzip2 -k archive.tar
real    0m0.687s
user    0m0.515s
sys     0m0.171s

shell> time 7za a -t7z archive.tar.7z archive.tar
real    0m2.992s
user    0m1.046s
sys     0m1.938s

shell> ll -h
總用量 5.4M
-rw-r--r--. 1 root root 3.5M  4月  3 00:48 archive.tar
-rw-r--r--. 1 root root 543K  4月  3 00:55 archive.tar.7z
-rw-r--r--. 1 root root 572K  4月  3 00:48 archive.tar.bz2
-rw-r--r--. 1 root root 746K  4月  3 00:55 archive.tar.gz

參考:
http://linux.cn/article-5131-1.html
http://linoxide.com/tools/linux-compress-decompress-tools/

整理自網路

Svoid
2015-04-02

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29733787/viewspace-1551807/,如需轉載,請註明出處,否則將追究法律責任。

相關文章