首頁 > 軟體

Linux基礎知識:壓縮與打包

2020-06-16 17:07:48

我們日常使用Window的時候,經常會用到壓縮與解壓縮,如果要壓縮一個檔案,右擊選擇【新增到壓縮檔案】,解壓縮則右擊選擇【解壓到當前資料夾】,“點點點”就能完成。但是在一個沒有裝圖形化介面的Linux作業系統又不能使用“點點點”,那該怎麼操作呢?本文就Linux中如何使用壓縮和打包工具做出解釋。

 為什麼要壓縮檔案

壓縮的目的是為了就是將檔案通過壓縮演算法轉變成一個體積更小格式的檔案,減小了檔案在硬碟上的佔用空間,壓縮檔案的時候,特別的消耗CPU的時鐘週期,因為CPU要進行大量的計算,所有壓縮也是一種拿時間換空間的操作,同時也能使檔案能夠通過較慢的網路連線來實現更快的傳輸。

常用的壓縮工具

在linux作業系統中提供了很多的壓縮和解壓縮工具,每個壓縮工具在執行壓縮的時候所用的演算法是不一樣的,設計越優良的演算法,壓縮的程度就越高。比較老的壓縮工具有compress(現在已經不常用了),常用的壓縮工具有:gzip、bzip、xz和zip。我們可以通過字尾名來區分壓縮檔案是被什麼工具壓縮的,例如如果使用compress壓縮檔案,得到的檔案的字尾名是.z,其他的壓縮的字尾名如下:

gzip、gunzip和zcat

 gzip是最常用的壓縮工具了,gunzip是對應的解壓縮工具。zcat可以在不解壓.gz格式的壓縮檔案的情況下檢視檔案的內容。

語法:gzip [OPTION]... FILE...
常用選項: -d:解壓縮,相當於gunzip;
         -#:指定壓縮比,預設是6,數位越大壓縮比越大(1-9),壓縮比=壓縮前檔案大小/壓縮後檔案的大小;
         -c:將壓縮結果輸出至標準輸出。  gzip -c file  >  /path/to/somefile.gz

舉例:
將/etc/init.d/functions複製到tmp目錄下執行gzip壓縮:

[root@localhost tmp]# cp /etc/init.d/functions /tmp/
[root@localhost tmp]# ll
total 16
-rw-r--r--. 1 root root 15131 Sep  3 06:20 functions
[root@localhost tmp]# gzip functions 
[root@localhost tmp]# ll
total 8
-rw-r--r--. 1 root root 4694 Sep  3 06:20 functions.gz

 也可以使用gunzip,為了方便記憶,建議大家直接使用-d選項就好了:

[root@localhost tmp]# gzip functions 
[root@localhost tmp]# ll
total 8
-rw-r--r--. 1 root root 4694 Sep  3 06:20 functions.gz
[root@localhost tmp]# gunzip functions.gz 
[root@localhost tmp]# ll
total 16
-rw-r--r--. 1 root root 15131 Sep  3 06:20 functions

 指定壓縮比:

[root@localhost tmp]# gzip -9 functions 
[root@localhost tmp]# ll
total 8
-rw-r--r--. 1 root root 4686 Sep  3 06:20 functions.gz

將壓縮比設定為9之後,相對於壓縮比6,僅僅只減少了8個位元組,一般情況下都不需要去動壓縮比,因為6已經是一個最好的選擇。

使用-c將輸出結果至標準輸出,我們將看到一堆亂碼,那-c選項到底有什麼用呢?

 我們在壓縮檔案的時候原檔案會被刪除,如果想保留原檔案就可以通過-c選項來實現啦!

[root@localhost tmp]# gzip -c functions > functions.gz
[root@localhost tmp]# ll
total 24
-rw-r--r--. 1 root root 15131 Sep  3 06:20 functions
-rw-r--r--. 1 root root  4694 Sep  3 06:39 functions.gz

 可以使用zcat在不解壓縮的情況下檢視檔案的內容:

[root@localhost tmp]# zcat functions.gz 
# -*-Shell-script-*-
#
# functions    This file contains functions to be used by most or all
#        shell scripts in the /etc/init.d directory.
#

TEXTDOMAIN=initscripts

# Make sure umask is sane
umask 022

# Set up a default search path.
PATH="/sbin:/usr/sbin:/bin:/usr/bin"
......(略) 

bzip2、bunzip2和bzcat

 和gzip類似,bzip2為壓縮工具,bunzip2為解壓縮工具,同樣bzcat的作用了在不解壓檔案的情況下,檢視檔案內容。

語法:bzip2 [OPTION]... FILE...
常用選項: -d:解壓縮,相當於bunzip2
         -#:指定壓縮比,預設是6,數位越大壓縮比越大(1-9)
         -k:keep,壓縮並保留原檔案,bzip2不需要像gzip那樣使用輸出重定向至指定的檔案,這樣就方便多啦

我們來舉例看一下:

將/etc/init.d/functions複製到tmp目錄下,使用bzip2壓縮:

[root@localhost tmp]# bzip2 functions 
[root@localhost tmp]# ll
total 8
-rw-r--r--. 1 root root 4763 Sep  3 06:20 functions.bz2

說明bzip2在預設壓縮的情況下也會刪除原檔案,節約了磁碟的空間。

再來看一下解壓縮的方法:

[root@localhost tmp]# ll
total 8
-rw-r--r--. 1 root root 4763 Sep  3 06:20 functions.bz2
[root@localhost tmp]# 
[root@localhost tmp]# bunzip2 functions.bz2 
[root@localhost tmp]# ll
total 16
-rw-r--r--. 1 root root 15131 Sep  3 06:20 functions
[root@localhost tmp]# bzip2 functions 
[root@localhost tmp]# ll
total 8
-rw-r--r--. 1 root root 4763 Sep  3 06:20 functions.bz2
[root@localhost tmp]# bzip2 -d functions.bz2 
[root@localhost tmp]# ll
total 16
-rw-r--r--. 1 root root 15131 Sep  3 06:20 functions
 
好吧,還是建議大家記住一個-d選項就好啦!
現在我們來使用以下-k選項:
 
[root@localhost tmp]# ll
total 16
-rw-r--r--. 1 root root 15131 Sep  3 06:20 functions
[root@localhost tmp]# bzip2 -k functions 
[root@localhost tmp]# ll
total 24
-rw-r--r--. 1 root root 15131 Sep  3 06:20 functions
-rw-r--r--. 1 root root  4763 Sep  3 06:20 functions.bz2

 使用bzcat在不開啟壓縮檔案的情況下檢視檔案的內容:

[root@localhost tmp]# bzcat functions.bz2 
# -*-Shell-script-*-
#
# functions    This file contains functions to be used by most or all
#        shell scripts in the /etc/init.d directory.
#

TEXTDOMAIN=initscripts

# Make sure umask is sane
umask 022

# Set up a default search path.
PATH="/sbin:/usr/sbin:/bin:/usr/bin"
export PATH
......(略) 

更多詳情見請繼續閱讀下一頁的精彩內容http://www.linuxidc.com/Linux/2017-09/146901p2.htm


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