Annotation of src/usr.bin/compress/gzip.1, Revision 1.13
1.13 ! sobrado 1: .\" $OpenBSD: gzip.1,v 1.12 2014/01/28 14:18:28 jmc Exp $
1.1 jmc 2: .\"
3: .\" Copyright (c) 1986, 1990, 1993
4: .\" The Regents of the University of California. All rights reserved.
5: .\"
6: .\" This code is derived from software contributed to Berkeley by
7: .\" James A. Woods, derived from original work by Spencer Thomas
8: .\" and Joseph Orost.
9: .\"
10: .\" Redistribution and use in source and binary forms, with or without
11: .\" modification, are permitted provided that the following conditions
12: .\" are met:
13: .\" 1. Redistributions of source code must retain the above copyright
14: .\" notice, this list of conditions and the following disclaimer.
15: .\" 2. Redistributions in binary form must reproduce the above copyright
16: .\" notice, this list of conditions and the following disclaimer in the
17: .\" documentation and/or other materials provided with the distribution.
18: .\" 3. Neither the name of the University nor the names of its contributors
19: .\" may be used to endorse or promote products derived from this software
20: .\" without specific prior written permission.
21: .\"
22: .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23: .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24: .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25: .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26: .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27: .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28: .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29: .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30: .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31: .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32: .\" SUCH DAMAGE.
33: .\"
34: .\" @(#)compress.1 8.2 (Berkeley) 4/18/94
35: .\"
1.13 ! sobrado 36: .Dd $Mdocdate: January 28 2014 $
1.1 jmc 37: .Dt GZIP 1
38: .Os
39: .Sh NAME
40: .Nm gzip ,
41: .Nm gunzip ,
42: .Nm gzcat
43: .Nd compress and expand data (deflate mode)
44: .Sh SYNOPSIS
45: .Nm gzip
1.11 millert 46: .Op Fl 123456789cdfhLlNnOqrtVv
1.1 jmc 47: .Op Fl b Ar bits
48: .Op Fl o Ar filename
49: .Op Fl S Ar suffix
50: .Op Ar
51: .Nm gunzip
1.11 millert 52: .Op Fl cfhLlNnqrtVv
1.1 jmc 53: .Op Fl o Ar filename
54: .Op Ar
55: .Nm gzcat
1.11 millert 56: .Op Fl fhqr
1.1 jmc 57: .Op Ar
58: .Sh DESCRIPTION
59: The
60: .Nm
61: utility
62: reduces the size of the named files using adaptive Lempel-Ziv coding,
63: in deflate mode.
64: If invoked as
65: .Nm gzip -O ,
66: the compress mode of compression is chosen;
67: see
68: .Xr compress 1
69: for more information.
70: Each file is renamed to the same name plus the extension
71: .Dq .gz .
72: As many of the modification time, access time, file flags, file mode,
73: user ID, and group ID as allowed by permissions are retained in the
74: new file.
75: If compression would not reduce the size of a file,
76: the file is ignored (unless
77: .Fl f
78: is used).
79: .Pp
80: The
81: .Nm gunzip
82: utility restores compressed files to their original form, renaming the
83: files by removing the extension (or by using the stored name if the
84: .Fl N
85: flag is specified).
86: It has the ability to restore files compressed by both
87: .Nm
88: and
89: .Xr compress 1 ,
90: recognising the following extensions:
91: .Dq .Z ,
92: .Dq -Z ,
93: .Dq _Z ,
94: .Dq .gz ,
95: .Dq -gz ,
96: .Dq _gz ,
97: .Dq .tgz ,
98: .Dq -tgz ,
99: .Dq _tgz ,
100: .Dq .taz ,
101: .Dq -taz ,
102: and
103: .Dq _taz .
104: Extensions ending in
105: .Dq tgz
106: and
107: .Dq taz
108: are not removed when decompressing, instead they are converted to
109: .Dq tar .
110: .Pp
111: The
112: .Nm gzcat
113: command is equivalent in functionality to
114: .Nm gunzip
115: .Fl c .
116: .Pp
117: If renaming the files would cause files to be overwritten and the standard
118: input device is a terminal, the user is prompted (on the standard error
119: output) for confirmation.
120: If prompting is not possible or confirmation is not received, the files
121: are not overwritten.
122: .Pp
123: If no files are specified, the standard input is compressed or uncompressed
124: to the standard output.
125: If either the input or output files are not regular files, the checks for
126: reduction in size and file overwriting are not performed, the input file is
127: not removed, and the attributes of the input file are not retained.
128: .Pp
1.3 millert 129: By default, when compressing, the original file name and time stamp
1.4 jmc 130: are stored in the compressed file.
1.3 millert 131: When uncompressing, this information is not used.
132: Instead, the uncompressed file inherits the time stamp of the
133: compressed version and the uncompressed file name is generated from
134: the name of the compressed file as described above.
135: These defaults may be overridden by the
136: .Fl N
137: and
138: .Fl n
139: flags, described below.
140: .Pp
1.1 jmc 141: The options are as follows:
142: .Bl -tag -width Ds
143: .It Fl 1...9
144: Use the deflate scheme, with compression factor of
145: .Fl 1
146: to
147: .Fl 9 .
148: Compression factor
149: .Fl 1
150: is the fastest, but provides a poorer level of compression.
151: Compression factor
152: .Fl 9
153: provides the best level of compression, but is relatively slow.
154: The default is
155: .Fl 6 .
156: .It Fl b Ar bits
157: Specify the
158: .Ar bits
159: code limit
160: .Pq see below .
161: .It Fl c
162: Compressed or uncompressed output is written to the standard output.
163: No files are modified (force
164: .Nm gzcat
165: mode).
166: .It Fl d
167: Decompress the source files instead of compressing them (force
168: .Nm gunzip
169: mode).
170: .It Fl f
171: Force compression of
172: .Ar file ,
173: even if it is not actually reduced in size.
174: Additionally, files are overwritten without prompting for confirmation.
175: If the input data is not in a format recognized by
176: .Nm
177: and if the option
178: .Fl c
179: is also given, copy the input data without change
180: to the standard output: let
181: .Nm gzcat
182: behave as
183: .Xr cat 1 .
184: .It Fl h
185: Print a short help message.
186: .It Fl L
1.12 jmc 187: A no-op which exists for compatibility only.
188: On GNU gzip, it displays the program's license.
1.1 jmc 189: .It Fl l
190: List information for the specified compressed files.
191: The following information is listed:
192: .Bl -tag -width "compression ratio"
193: .It compressed size
194: Size of the compressed file.
195: .It uncompressed size
196: Size of the file when uncompressed.
197: .It compression ratio
198: Ratio of the difference between the compressed and uncompressed
199: sizes to the uncompressed size.
200: .It uncompressed name
201: Name the file will be saved as when uncompressing.
202: .El
203: .Pp
204: If the
205: .Fl v
206: option is specified, the following additional information is printed:
207: .Bl -tag -width "compression method"
208: .It compression method
209: Name of the method used to compress the file.
210: .It crc
211: 32-bit CRC
212: .Pq cyclic redundancy code
213: of the uncompressed file.
214: .It "time stamp"
215: Date and time corresponding to the last data modification time
216: (mtime) of the compressed file (if the
217: .Fl n
218: option is specified, the time stamp stored in the compressed file
219: is printed instead).
220: .El
221: .It Fl N
222: When uncompressing or listing, use the time stamp and file name stored
223: in the compressed file, if any, for the uncompressed version.
224: .It Fl n
1.3 millert 225: When compressing, do not store the original file name and time stamp
226: in the
227: .Nm
228: header.
1.1 jmc 229: .It Fl O
230: Use old compression method
231: (force
232: .Xr compress 1
233: mode).
234: .It Fl o Ar filename
235: Set the output file name.
236: .It Fl q
237: Be quiet: suppress all messages.
238: .It Fl r
239: Recursive mode:
240: .Nm
241: will descend into specified directories.
242: .It Fl S Ar suffix
243: Set the suffix for compressed files.
244: .It Fl t
245: Test the integrity of each file leaving any files intact.
246: .It Fl V
1.12 jmc 247: A no-op which exists for compatibility only.
248: On GNU gzip, it displays version information.
1.1 jmc 249: .It Fl v
250: Print the percentage reduction of each file and other information.
251: .El
252: .Pp
253: .Nm
254: uses a modified Lempel-Ziv algorithm
255: .Pq LZW .
256: Common substrings are replaced by pointers to previous strings,
257: and are found using a hash table.
258: Unique substrings are emitted as a string of literal bytes,
259: and compressed as Huffman trees.
260: When code 512 is reached, the algorithm switches to 10-bit codes and
261: continues to use more bits until the
262: limit specified by the
263: .Fl b
264: flag is reached.
265: .Ar bits
266: must be between 9 and 16
267: .Pq the default is 16 .
268: .Pp
269: After the
270: .Ar bits
271: limit is reached,
272: .Nm
273: periodically checks the compression ratio.
274: If it is increasing,
275: .Nm
276: continues to use the existing code dictionary.
277: However, if the compression ratio decreases,
278: .Nm
279: discards the table of substrings and rebuilds it from scratch.
280: This allows the algorithm to adapt to the next
281: .Dq block
282: of the file.
283: .Pp
284: The
285: .Fl b
286: flag is omitted for
287: .Nm gunzip
288: since the
289: .Ar bits
290: parameter specified during compression
291: is encoded within the output, along with
292: a magic number to ensure that neither decompression of random data nor
293: recompression of compressed data is attempted.
294: .Pp
295: The amount of compression obtained depends on the size of the
296: input, the number of
297: .Ar bits
298: per code, and the distribution of common substrings.
299: Typically, text such as source code or English is reduced by 60 \- 70% using
300: .Nm .
301: Compression is generally much better than that achieved by Huffman
302: coding (as used in the historical command pack), or adaptive Huffman
303: coding (as used in the historical command compact), and takes less
304: time to compute.
1.2 ray 305: .Sh ENVIRONMENT
306: .Bl -tag -width Ds
307: .It Ev GZIP
308: Options which are passed to
309: .Nm ,
310: .Nm gunzip ,
311: and
312: .Nm gzcat
313: automatically.
314: .El
1.10 jmc 315: .Sh EXIT STATUS
316: The
1.13 ! sobrado 317: .Nm gzip
! 318: utility exits with one of the following values:
! 319: .Pp
! 320: .Bl -tag -width Ds -offset indent -compact
! 321: .It 0
! 322: Success.
! 323: .It 1
! 324: An error occurred.
! 325: .It 2
! 326: At least one of the specified files was not compressed since
! 327: .Fl f
! 328: was not specified and compression would have resulted in a size
! 329: increase.
! 330: .It \*(Gt2
! 331: An error occurred.
! 332: .El
! 333: .Pp
! 334: The
! 335: .Nm gunzip
1.10 jmc 336: and
337: .Nm gzcat
1.13 ! sobrado 338: utilities exit 0 on success,
! 339: and >0 if an error occurs.
1.1 jmc 340: .Sh SEE ALSO
341: .Xr compress 1 ,
342: .Xr gzexe 1 ,
343: .Xr gzsig 1 ,
344: .Xr zdiff 1 ,
345: .Xr zforce 1 ,
346: .Xr zmore 1 ,
347: .Xr znew 1 ,
348: .Xr compress 3
1.9 jmc 349: .Sh STANDARDS
1.8 jmc 350: .Rs
351: .%A P. Deutsch
352: .%A J-L. Gailly
353: .%D May 1996
354: .%R RFC 1950
355: .%T ZLIB Compressed Data Format Specification version 3.3
356: .Re
1.9 jmc 357: .Pp
1.8 jmc 358: .Rs
359: .%A P. Deutsch
360: .%D May 1996
361: .%R RFC 1951
362: .%T DEFLATE Compressed Data Format Specification version 1.3
363: .Re
1.9 jmc 364: .Pp
1.8 jmc 365: .Rs
366: .%A P. Deutsch
367: .%D May 1996
368: .%R RFC 1952
369: .%T GZIP file format specification version 4.3
370: .Re
1.1 jmc 371: .Sh HISTORY
372: .Nm gzip
373: compatibility was added to
374: .Xr compress 1
375: in
376: .Ox 3.4 .
377: The
378: .Sq g
379: in this version of
380: .Nm gzip
381: stands for
382: .Dq gratis .