Linux基礎命令---gzip

一生有你llx發表於2018-12-17

gzip

gzip 通過Lempel-ziv演算法來壓縮檔案,壓縮的時候保留每個檔案的所有者、許可權、修改時間。對於符號連結,gzip將會忽略它。

如果壓縮的檔名對其檔案系統來說太長,則gzip將截斷它。Gzip試圖只截斷檔名中超過3個字元的部分。(部分由點分隔。)如果名稱僅由小部件組成,最長的部分將被截斷。例如,如果檔名限制為14個字元,則“gzip.msdos.exe”壓縮為“gzi.msd.exe.gz”。在沒有檔名長度限制的系統中,名稱不會被截斷。

預設情況下,gzip將原始檔名和時間戳儲存在壓縮檔案中。這些在使用“-N”選項解壓縮檔案時使用。當壓縮檔名被截斷或檔案傳輸後沒有保留時間戳時,這是非常有用的。壓縮檔案可以使用“gzip –d”或“gunzip”或“zcat”恢復到它們的原始形式。如果儲存在壓縮檔案中的原始名稱不適合其檔案系統,則從原始檔案中構造新名稱以使其合法。

gunzip 在其命令列中獲取一個檔案列表,並替換其名稱以.gz、-z、-z、_z或.z結尾的每個檔案,該檔案以正確的魔術號開頭,檔案的未壓縮檔案沒有原來的副檔名。gunzip還將特殊的副檔名.tgz和.taz分別識別為.tar.gz和.tar.z的縮寫。壓縮時,gzip在必要時使用.tgz副檔名,而不是截斷副檔名為.tar的檔案。

gunzip 目前可以解壓縮由gzip,zip,compress-H或Pack建立的檔案.輸入格式的檢測是自動的。當使用前兩種格式時,gunzip檢查32位CRC。對於包,槍拉鍊檢查未壓縮長度。標準壓縮格式的設計不是為了允許一致性檢查。然而,gunzip有時能夠檢測到一個壞的.z檔案。如果在解壓縮.z檔案時出現錯誤,請不要僅僅因為標準解壓縮不抱怨而認為.Z檔案是正確的。這通常意味著標準解壓縮不檢查其輸入,並愉快地生成垃圾輸出。上海合作組織壓縮-H格式(lzh壓縮方法)不包括一個CRC,但也允許一些一致性檢查。

由zip建立的檔案只有在使用“通縮”方法壓縮單個成員的情況下才能被gzip解壓縮。此特性僅用於幫助將tar.zip檔案轉換為tar.gz格式。要使用單個成員提取zip檔案,可以使用諸如“gunzip  <  foo.zip”或“gunzip  –S  .zip  foo.zip”之類的命令。要提取包含多個成員的zip檔案,請使用解壓縮而不是gunzip。

Zcat 和“gunzip  –c”是一樣的。(在某些系統上,可以將zcat安裝為gzcat,以保留原始連結以進行壓縮。)zcat解壓縮命令列上的檔案列表或其標準輸入,並將未壓縮的資料寫入標準輸出。無論是否有.gz字尾,zcat都會解壓縮具有正確魔術號的檔案。

Gzip 使用用於zip和PKZIP的Lempel-Ziv演算法。獲得的壓縮量取決於輸入的大小和常用子字串的分佈。通常,像原始碼或英語這樣的文字會減少60-70%.壓縮通常比LZW(用於壓縮)、Huffman編碼(用於Pack)或自適應Huffman編碼(緊湊)要好得多。

壓縮總是被執行,即使壓縮檔案比原始檔案稍大。最壞的情況是gzip檔案頭的幾個位元組,加上每32K塊5個位元組,或者大檔案的擴充套件率為0.015%。注意,使用過的磁碟塊的實際數量幾乎從未增加。gzip在壓縮或解壓縮時保留檔案的模式、所有權和時間戳。

此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

1 、語法

gzip [ -acdfhlLnNrtvV19 ]  [-S suffix]  [ name ... ] 

 

2 、選項列表

選項

說明

-h | --help

幫助資訊

-V | --version

顯示命令版本資訊

-a | --ascii

文字模式,只適用於某些系統

-c | --stdout | --to-stdout

將解壓檔案寫到標準輸出,原始檔不變。如果有多個輸入檔案,則輸出由一系列獨立壓縮的成員組成。為了獲得更好的壓縮,在壓縮所有輸入檔案之前先將它們連線起來。

-d | --decompress | --uncompress

解壓

-f | --force

強制執行

-l | --list

對於每一個壓縮的檔案,列出壓縮檔案大小、解壓大小、壓縮比列、壓縮前的檔名字

-L | --license

列出gzip的許可證

-n | --no-name

壓縮檔案的時候,不保留原始檔名字和時間屬性

-N | --name

壓縮的時候,保留原始檔案和時間屬性

-q | --quite

跳過所有的警告資訊

-r | --recursive

遞迴壓縮子目錄

-S |.suf | --suffix | .suf

指定壓縮檔案字尾。壓縮時,使用字尾.suf代替.gz。可以提供任何非空字尾,但應避免使用.z和.gz以外的字尾,以避免檔案傳輸到其他系統時出現混淆。

-t | --test

測試

-v | --verbose

顯示執行過程

-num | --fast | --best

使用指定的數字num調整壓縮速度,其中-1或--fast表示最快的壓縮方法(較小的壓縮)和-9或--best表示最慢的壓縮方法(最佳壓縮)。預設的壓縮級別是-6(也就是說,以犧牲速度為代價傾向於高壓縮)。

 

3 、環境變數

環境變數GZIP可以儲存gzip的一組預設選項。這些選項首先被解釋,可以被顯式命令列引數覆蓋。例如

for sh:    GZIP="-8v --name"; export GZIP

for csh:   setenv GZIP "-8v --name"

for MSDOS: set GZIP=-8v --name

在VAX/VMS上,環境變數的名稱為GZIP_OPT,以避免與用於呼叫程式的符號設定衝突。

 

4 、診斷資訊

退出狀態通常為0;如果發生錯誤,退出狀態為1。如果發生警告,退出狀態為2。

Usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...]

在命令列上指定了無效選項

file: not in gzip format

指定給 gunzip 的檔案尚未壓縮。

file: Corrupt input. Use zcat to recover some data.

壓縮檔案已損壞。

file: compressed with xx bits, can only handle yy bits

gzip 重新壓縮檔案,壓縮更好,記憶體更少。

file: already has .gz suffix -- no change

假定該檔案已被壓縮。重新命名該檔案,然後再試一次。

file already exists; do you wish to overwrite (y or n)?

如果希望替換輸出檔案,請響應 “y” ;如果不希望替換輸出檔案,則響應 “n”

gunzip: corrupt input

檢測到 SIGSEGV 違規,這通常意味著輸入檔案已損壞。

xx.x% Percentage of the input saved by compression.

只與 -v -l 有關。

-- not a regular file or directory: ignored

當輸入檔案不是常規檔案或目錄 ( 例如符號連結、套接字、 FIFO 、裝置檔案 ) 時,它將保持不變。

-- has xx other links: unchanged

輸入檔案有連結;它保持不變。有關更多資訊,請參見 ln(1) 。使用 -f 標誌強制壓縮多連結檔案。

 

5 、一些先進用法

可以連線多個壓縮檔案。在這種情況下,gunzip將立即提取所有成員。例如:

gzip -c file1  > foo.gz

gzip -c file2 >> foo.gz

gunzip -c foo

上面的程式碼等價於

cat file1 file2

如果.gz檔案的一個成員被損壞,其他成員仍然可以恢復(如果損壞的成員被移除)。但是,您可以通過一次壓縮所有成員來獲得更好的壓縮。

cat file1 file2 | gzip > foo.gz

上面的程式碼比下面的更好

gzip -c file1 file2 > foo.gz

如果您想要重新壓縮連線的檔案以獲得更好的壓縮,可以使用

gzip -cd old.gz | gzip > new.gz

如果一個壓縮檔案由多個成員組成,則--list選項報告的未壓縮大小和CRC僅適用於最後一個成員。如果需要所有成員的未壓縮大小,可以使用

gzip -cd file.gz | wc -c

如果希望建立一個包含多個成員的單個歸檔檔案,以便以後可以獨立提取成員,請使用一個歸檔程式(如tar或zip)。GNUtar支援-z選項來透明地呼叫gzip。gzip是作為tar的補充,而不是替代。

 

6 、例項

1 )壓縮檔案

[root@localhost weijie]#  gzip 1.c              // 壓縮

[root@localhost weijie]#  ls                     // 壓縮之後,原始檔被刪除了

11.c  1.c.gz  2.c  3.c  4.c  5.c  6.c  foo

2 )解壓

[root@localhost weijie]#  gzip -ld 1.c.gz       // 解壓,並顯示詳細過程

         compressed        uncompressed  ratio uncompressed_name

                 70                  53   9.4% 1.c

3 )將兩個檔案壓縮到一個檔案中

[root@localhost weijie]#  cat 1.c 2.c                   // 輸出兩個檔案的內容

hello world, 

i am david. 

i love linux, 

love code.

123

23

212

[root@localhost weijie]#  gzip –c 1.c > foo.gz        // 1.c 壓縮到 foo

[root@localhost weijie]#  gzip –c 2.c >> foo.gz       // 2.c 壓縮到 foo

[root@localhost weijie]#  gzip -d foo.gz               // 解壓 foo

[root@localhost weijie]#  cat foo                       // 顯示 foo 的內容

hello world, 

i am david. 

i love linux, 

love code.

123

23

212





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

相關文章