.\" 中文版版權所有 Liu JingSong, www.linuxforum.net 2000 .\" 本文件可在遵照LDP GENERAL PUBLIC LICENSE,Version 1, September 1998 .\" 中描述的條件下進行復制,且該檔案釋出時必須包含該文件. .TH GZIP 1 local .SH NAME gzip, gunzip, zcat \- 壓縮或展開檔案 .SH 總攬 .ll +8 .B gzip .RB [ " \-acdfhlLnNrtvV19 " ] .RB [ \-S\ 字尾 ] [ .I "檔名 \&..." ] .ll -8 .br .B gunzip .RB [ " \-acfhlLnNrtvV " ] .RB [ \-S\ 字尾 ] [ .I "檔名 \&..." ] .br .B zcat .RB [ " \-fhLV " ] [ .I "檔名 \&..." ] .SH 描述 .I Gzip 採用Lempel-Ziv 編碼演算法(LZ77)壓縮給定檔案的大小。 在可能的情況下, 每個檔案被具有副檔名 .B "\&.gz," 的檔案所替換, 同時保留原屬主狀態,存取和修改時間 (在VMS系統下預設副檔名為 .B "\-gz" 在MSDOS、OS/2 FAT, Windows NT FAT 和Atari系統下,預設副檔名為 .B "z" ) 如果未指定檔名,或者指定了一個名為"-"的檔名,則從標準輸入讀取資料,壓縮的 結果輸出到標準輸出。 .I Gzip 只嘗試壓縮常規檔案,特別地,它將忽略符號連線。 .PP 如果壓縮後的檔名對於所在的檔案系統來說太長, .I gzip 會將其截斷。 .I Gzip 只嘗試截斷檔名中大於3個字元的段(每個段由點分隔)。如果檔名只由較小的段 組成,最長的段將被截斷。例如,如果檔名的長度限制是14個字元,檔案gzip.msdos.exe 將被壓縮為gzi.msd.exe.gz。在沒有檔名長度限制的系統中,檔名將不會被截斷。 .PP 預設情況下, .I gzip 將原始檔名和時間資訊儲存在壓縮後的檔案中。 當採用 .B \-N 選項解壓縮檔案時,這些資訊將被利用。在經過檔案傳輸後文件名被截斷及時間資訊 未被保留的情況下,這些資訊將將用於恢復檔名及時間資訊。 .PP 用 .I gzip -d 或者 .I gunzip 以及 .I zcat. 可以將壓縮後的檔案恢復到原始的形式。如果保留在壓縮檔案中的原始檔名不適合 於當前的檔案系統,將根據原檔名新建一個合法的檔名。 .PP .I gunzip 將命令列中以.gz, -gz, .z, -z, _z 或 .Z結尾並具有正確標誌頭的檔案 解壓縮,並以去掉副檔名的解壓縮檔案替換原檔案。 .I gunzip 也能識別副檔名為 .B "\&.tgz" 和 .B "\&.taz" 的檔案,並將其分別當作 .B "\&.tar.gz" 和 .B "\&.tar.Z" 的縮寫。 在壓縮時,如果採用 .B "\&.tar" 副檔名則需要對檔名進行截斷處理時, .I gzip 將採用 .B "\&.tgz" 作為副檔名。 .PP .I gunzip 目前能夠解壓由 .I gzip, zip, compress, compress -H 以及 .I pack 產生的檔案。 對輸入格式的檢測是自動的。當採用前兩種格式時, .I gunzip 檢查一個32位的CRC校驗碼。對於 .I pack, gunzip 則檢查壓縮前的資料長度。標準的 .I compress 格式的設計無法實現一致性檢查。但有時 .I gunzip 仍然能檢測到壞的.Z檔案。如果你在解壓一個.Z檔案時出現錯誤,不要簡單地因為標準的 .I uncompress 沒有報錯就認定.Z檔案是正確的。 這通常意味著標準的 .I uncompress 沒有檢查它的輸入資料,而盲目地產生了錯誤的輸出。SCO的compress -H格式(lzh壓縮方 法)不包含CRC校驗碼,但也允許一些一致性檢查。 .PP 由 .I zip 生成的檔案, 如果其內容只有一個檔案並且是以'deflation'方式壓縮的,則可 由gzip解壓。這一特性只是為了方便將tar.zip 格式的檔案轉換為tar.gz格式而加入的。 要解壓含有多個檔案的zip檔案,請用 .I unzip. .PP .I zcat 的功能與 .I gunzip .B \-c. 相同。 (在一些系統中, .I zcat 可能被安裝成 .I gzcat 以保留 .I compress 與zcat的原有連線。) .I zcat 將命令列中列出的檔案或由標準輸入輸入的資料解壓,解壓後的資料寫到標準輸出。 .I zcat 解壓具有正確標誌頭的檔案,而不管其是否帶有 .B "\&.gz" 字尾。 .PP .I Gzip 採用 .I zip 和 PKZIP 中所採用的Lempel-Ziv演算法。得到的壓縮比依賴於輸入資料的大小以及公用 子串的分佈。例如源程式和英文文件能夠壓縮60\-70%。 壓縮比通常比LZW( .IR compress 採用的演算法)、Huffman編碼( .IR pack 所採用的演算法)、以及自適應Huffman編碼( .RI compact ) 等方法要好得多。 .PP 即使壓縮後的檔案略大於原檔案,壓縮也照樣進行。最壞的情況下,多出的資料包括 gzip檔案頭中的若干個位元組,加上每塊32K的5個位元組,或者,對於大檔案來說0.015% 的放大率。注意實際佔用的硬碟塊數目幾乎從不增加。 .I gzip 在壓縮和解壓縮時保留原檔案的屬主和時間資訊。 .SH 選項 .TP .B \-a --ascii Ascii文字模式:按本地習慣轉換行結束符。該選項僅在一些非Unix 系統上有效。 對於MSDOS,在壓縮時CR LF(譯註:即回車和換行符)被轉換為LF,在解壓時LF被 轉換為CR LF。 .TP .B \-c --stdout --to-stdout 將結果寫到標準輸出;原檔案保持不變。如果有多個輸入檔案,輸出將由一系列 獨立的壓縮檔案組成。如果想得到較好的壓縮率,在壓縮前應將多個檔案連在一起。 .TP .B \-d --decompress --uncompress 解壓縮。 .TP .B \-f --force 強制壓縮和解壓縮,即使指定檔案具有多重連線,或相應檔案已經存在,或壓縮資料 來自或寫往一個終端。 如果輸入資料是 .I gzip 無法識別的格式,同時在命令列中也給出了--stdout選項,gzip將把輸入資料複製至標準 輸出而不做任何改動,就象cat所做的一樣。 如果未給出 .B \-f 選項,並且未在後臺執行, .I gzip 會提示使用者以確認是否覆蓋一個已存在的檔案。 .TP .B \-h --help 顯示幫助資訊然後退出。 .TP .B \-l --list 列出每個壓縮檔案的如下專案: compressed size: 壓縮檔案的長度 uncompressed size: 壓縮前檔案的長度 ratio: 壓縮率(如果未知則為0.0%) uncompressed_name: 壓縮前的檔名 對於非gzip格式的檔案,壓縮前檔案長度顯示為-1,例如由compress壓縮的.Z檔案。 可用下列命令得到這種檔案壓縮前的長度: zcat file.Z | wc -c 如果同時指定了--verbose選項,下列專案也被列出: method: 壓縮方式 crc: 未壓縮資料的32位CRC校驗碼 date & time: 壓縮前檔案的時間資訊 目前支援的壓縮方式有deflate、compress、lzh(SCO下的compress -H)以及pack等方式。 對於非gzip格式的檔案,crc校驗碼顯示為ffffffff。 若指定了--name選項,如果有的話,壓縮前檔名,日期以及時間是儲存在壓縮檔案中 的內容。 若指定了--verbose選項,還將列出所有檔案的長度總和,除非某些檔案的長度未知。 若指定--quiet選項,將不顯示標題和合計兩行內容。 .TP .B \-L --license 顯示 .I gzip 的許可證資訊然後退出。 .TP .B \-n --no-name 在壓縮時,預設不保留原始檔名和時間資訊。(如果必須對檔名作截斷處理, 則原始檔名總是被儲存。) 在解壓縮時,即使有也不恢復原始檔名(僅將壓 縮檔名中的 .I gzip 字尾去掉)和時間資訊(複製壓縮檔案中相應資訊)。該選項是壓縮時的預設選項。 .TP .B \-N --name 在壓縮時總是儲存原始檔名和時間資訊;該選項為預設選項。在解壓縮時,如果 存在原始檔名和時間資訊則恢復之。該選項可用於對檔名長度有限制的系統, 以及經過檔案傳輸後丟失時間資訊的情況。 .TP .B \-q --quiet 壓制所有警告資訊。 .TP .B \-r --recursive 遞迴地訪問目錄結構。如果命令列中有目錄名, .I gzip 將進入目錄並壓縮所有找到的檔案(如果執行的命令是 .I gunzip 則對其解壓縮)。 .TP .B \-S .suf --suffix .suf 採用.suf字尾取代.gz字尾。可以指定任何字尾,但應避免使用除了.z和.gz以外 的其它字尾,以免檔案傳輸到其它系統時發生混淆。一個空字尾將迫使gunzip 解壓縮所有檔案而不管它具有什麼樣的字尾,例如: gunzip -S "" * (在MSDOS下用*.*替換*) 以前版本的gzip採用.z字尾。為了避免與 .IR pack "(1)". 衝突,後來作了改動。 .TP .B \-t --test 測試。檢查壓縮檔案的完整性。 .TP .B \-v --verbose 詳盡模式。顯示每個壓縮或解壓縮檔案的名字和壓縮率。 .TP .B \-V --version 版本。顯示版本號和編譯選項後退出。 Version. Display the version number and compilation options then quit. .TP .B \-# --fast --best 用指定的數字 .IR # 調整壓縮速度, 其中 .B \-1 及 .B \-\-fast 對應最快壓縮方式(壓縮率較低), .B \-9 及 .B \-\-best 對應最慢壓縮方式(壓縮率最佳)。預設的壓縮級別為 .BR \-6 (也就是說,以速度為代價偏向於高壓縮率)。 .SH "高階用法" 多個被壓縮的檔案可以連在一起。在這種情況下, .I 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這樣的歸檔軟體。GNU tar支援-z選項,可直接呼叫gzip。gzip設計為 tar的補充,而非它的取代物。 .SH "環境變數" 環境變數 .B GZIP 能夠控制一系列 .I gzip 的預設選項。 這些選項被首先解釋,並且能被命令列引數中的直接定義覆蓋。例如: 在sh下: GZIP="-8v --name"; export GZIP 在csh下: setenv GZIP "-8v --name" 在MSDOS下: set GZIP=-8v --name 在Vax/VMS系統中,為了避免與呼叫該程式的符號設定衝突,該環境變數名為GZIP_OPT。 .SH "另見" znew(1), zcmp(1), zmore(1), zforce(1), gzexe(1), zip(1), unzip(1), compress(1), pack(1), compact(1) .SH "診斷" 正常的退出狀態為0;如果出現錯誤,退出狀態為1。如果出現警告資訊,退出狀態為2。 .PP Usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...] .in +8 在命令列中出現非法的選項。 .in -8 .IR file : not in gzip format .in +8 指定給 .I gunzip 的檔案沒有被壓縮。 .in -8 .IR file: Corrupt input. Use zcat to recover some data. .in +8 壓縮檔案已損壞。在損壞點以前的資料可以用下列命令恢復。 .in +8 zcat file > recover .in -16 .IR file : compressed with .I xx bits, can only handle .I yy bits .in +8 檔案 .I File 是由一個比在當前機器上能處理更多 .I 位 的程式壓縮的(採用LZW演算法)。用gzip重新壓縮該檔案,將得到較好的壓縮率,並且 佔用的記憶體較少。 .in -8 .IR file : already has .gz suffix -- no change .in +8 gzip認為該程式已經壓縮。改變檔名再試。 .in -8 .I file already exists; do you wish to overwrite (y or n)? .in +8 如果你想覆蓋該檔案回答"y",如果不是回答"n"。 .in -8 gunzip: corrupt input .in +8 探測到一個SIGSEGV非法操作,這通常意味著輸入檔案已經損壞。 .in -8 .I "xx.x%" .in +8 由於壓縮而減少的資料量相對於輸入資料的百分比。(僅對應於 .BR \-v 和 .BR \-l 選項。) .in -8 -- not a regular file or directory: ignored .in +8 如果輸入檔案不是常規檔案或目錄,(例如符號連線,socket檔案,FIFO檔案, 裝置檔案),該檔案將保持不變。 .in -8 -- has .I xx other links: unchanged .in +8 該檔案有連線,將保持不變。更多資訊參見 .IR ln "(1)". 採用 .B \-f 強制壓縮多重連線檔案。 .in -8 .SH 警告 在向磁帶寫壓縮資料時,通常需要在資料尾部充零以使資料總長度為磁帶資料塊 長度的整數倍。當用 .I gunzip 對這樣的資料解壓縮時, .I gunzip 能檢測到尾部的無用資料,在預設情況下將發出一個警告資訊。必須採用--quiet 選項才能壓制這一警告資訊。該選項可以設在 .B GZIP 環境變數中,例如: 在sh下: GZIP="-q" tar -xfz --block-compress /dev/rst0 在csh下: (setenv GZIP -q; tar -xfz --block-compr /dev/rst0 在上面的例子中,gzip被採用了-z選項的GNU tar呼叫。在磁帶上讀寫壓縮資料時, 應確保採用同樣的資料塊長度(tar的 .B -b 選項)。(本例假定使用的是GNU版本的tar。) .SH 缺陷 如果資料長度超過2GB, 採用--list選項時報告的檔案長度不正確。 如果壓縮檔案位於不能定位的儲存介質上,採用--list選項時報告的檔案長度為-1,crc 校驗碼為ffffffff。 在極少數情況下,--best選項得到的壓縮率比預設情況(-6)還差。對於一些高度冗餘 的檔案, .I compress 比 .I gzip 壓縮得更好。 .SH "[中文版維護人]" .B Liu JingSong .SH "[中文版最新更新]" 2000/12/28 .SH "[中國Linux論壇man手冊頁翻譯計劃]" .BI http://cmpp.linuxforum.net .SH "跋" .br 本頁面中文版由中文 man 手冊頁計劃提供。 .br 中文 man 手冊頁計劃:\fBhttps://github.com/man-pages-zh/manpages-zh\fR