gzip Command in Linux

By 

Updated on

5 min read

Linux Gzip Command

When you need to reduce file sizes before transferring them over a network or freeing up disk space, gzip is the standard compression tool on Linux.

gzip uses the Deflate algorithm and saves compressed files with a .gz extension. By default, it replaces the original file with the compressed version and keeps the file’s timestamp, mode, and ownership intact.

gzip compresses only single files. If you want to compress multiple files or a directory into one archive, you need to create a Tar archive first and then compress the .tar file with gzip. Files ending in .tar.gz or .tgz are Tar archives compressed with gzip.

gzip is best suited for text files, Tar archives, and similar data. Avoid using it on images, audio, PDFs, and other binary formats that are already compressed; the size reduction will be negligible.

This guide covers the most common gzip options with practical examples.

gzip Command Syntax

The general syntax for the gzip command is as follows:

txt
gzip [OPTION]... [FILE]...

gzip compresses only regular files and creates a compressed file for each input. By convention, compressed files end with .gz or .z. Symbolic links are ignored.

Compressing Files with gzip

To compress a single file, invoke the gzip command followed by the filename:

Terminal
gzip filename

gzip will create a file filename.gz and delete the original file.

By default, gzip keeps the original file timestamp, mode, ownership, and name in the compressed file.

Keep the original file

If you want to keep the input (original) file, use the -k option:

Terminal
gzip -k filename

Another option to keep the original file is to use the -c option, which tells gzip to write on standard output and redirect the output to a file:

Terminal
gzip -c filename > filename.gz

This method is useful in scripts because it never removes the original file.

Verbose output

Use the -v option if you want to see the percentage reduction and the names of the files that are being processed:

Terminal
gzip -v filename
output
filename:	  7.5% -- replaced with filename.gz

Compress multiple files

You can also pass multiple files as arguments to the command. For example, to compress the files named file1, file2, file3, you would run the following command:

Terminal
gzip file1 file2 file3

The command above will create three compressed files, file1.gz, file2.gz, file3.gz.

Compress all files in a directory

To compress all files in a given directory, use the -r option:

Terminal
gzip -r directory

gzip will recursively traverse through the whole directory structure and compress all the files in the directory and its subdirectories.

Change the compression level

gzip allows you to specify a range of compression levels, from 1 to 9. -1 or --fast means the fastest compression speed with minimal compression ratio, and -9 or --best indicates the slowest compression speed with maximum compression ratio. The default compression level is -6.

For example, to get maximum compression, you would run:

Terminal
gzip -9 filename

Compression is a CPU-intensive task; the higher the compression level, the longer the process takes.

Using standard input

To create a .gz file from standard input, pipe the output of the command to gzip. For example, to create a Gzipped MySQL database backup , you would run:

Terminal
mysqldump database_name | gzip -c > database_name.sql.gz

The output of the mysqldump command will be input for gzip.

Decompressing Files with gzip

To decompress a .gz file , use the -d option:

Terminal
gzip -d filename.gz

Another command you can use to decompress a Gzip file is gunzip . It works the same as gzip -d:

Terminal
gunzip filename.gz

You might find it easier to remember gunzip than gzip -d.

Keep the compressed file

Same as when compressing a file, the -k option tells gzip to keep the input file, in this case, that is the compressed file:

Terminal
gzip -dk filename.gz

Decompress multiple files

To decompress multiple files at once, pass the filenames to the gzip command as arguments:

Terminal
gzip -d file1.gz file2.gz file3.gz

Decompress all files in a directory

When used with -d and -r options, gzip decompresses all files in a given directory recursively:

Terminal
gzip -dr directory

List Compressed File Information

When used with the -l option, the gzip command shows statistics about the given compressed files:

Terminal
gzip -l filename

The output will include the uncompressed file name, the compressed and uncompressed size, and the compression ratio:

output
         compressed        uncompressed  ratio uncompressed_name
                130                 107   7.5% filename

To get more information, add the -v option:

Terminal
gzip -lv filename
output
method  crc     date  time           compressed        uncompressed  ratio uncompressed_name
defla a9b9e776 Sep  3 21:20                 130                 107   7.5% filename

Test a Compressed File

To verify a .gz file without extracting it, use the -t option:

Terminal
gzip -t filename.gz

View the Contents of a Compressed File

To view the contents of a .gz file without decompressing it, use zcat:

Terminal
zcat filename.gz

zcat writes the decompressed output to standard output, so you can pipe it to other commands. For example, to search a compressed log file for a pattern:

Terminal
zcat access.log.gz | grep 'ERROR'

Quick Reference

For a printable quick reference, see the gzip cheatsheet .

CommandDescription
gzip filenameCompress a file (replaces original)
gzip -k filenameCompress and keep the original file
gzip -d filename.gzDecompress a file
gunzip filename.gzDecompress a file (alias for gzip -d)
gzip -r directoryCompress all files in a directory recursively
gzip -9 filenameMaximum compression
gzip -1 filenameFastest compression
gzip -l filename.gzShow compression statistics
gzip -t filename.gzTest integrity of a compressed file
zcat filename.gzView compressed file contents without extracting

Conclusion

gzip is a fast and widely supported compression tool, and understanding its options makes everyday tasks like archiving logs or preparing files for transfer much quicker. For more details, run man gzip or visit the GNU gzip documentation .

Linuxize Weekly Newsletter

A quick weekly roundup of new tutorials, news, and tips.

About the authors

Dejan Panovski

Dejan Panovski

Dejan Panovski is the founder of Linuxize, an RHCSA-certified Linux system administrator and DevOps engineer based in Skopje, Macedonia. Author of 800+ Linux tutorials with 20+ years of experience turning complex Linux tasks into clear, reliable guides.

View author page