В Linux команда gzip
предназначена для сжатия данных без потерь с помощью одноименной утилиты, цель использования которой — экономия дискового пространства.
Содержание
- Введение
- Синтаксис
- Опции
- Сжатие файлов с помощью gzip
- Распаковка файлов с помощью gzip
- Список содержимого сжатого файла
- Заключение
Введение
gzip
— один из самых популярных алгоритмов сжатия, который позволяет уменьшить размер файла и сохранить исходный режим файла, владельца и отметку времени.
Команда gzip
сжимает только отдельные файлы и создает сжатый файл для каждого заданного файла. По соглашению имя сжатого файла должно заканчиваться на .gz
или .z
.
Если вы хотите сжать несколько файлов или каталогов в один файл, сначала вам нужно создать архив tar
, а затем сжать .tar
файл с помощью gzip
. Файл, оканчивающийся на .tar.gz
или .tgz
является архивом tar
, сжатым с помощью gzip
.
Команда gzip
чаще всего используется для сжатия текстовых файлов, архивов tar
и веб-страниц. Не используйте её для сжатия изображений, аудио, PDF-документов и других двоичных файлов, поскольку они уже сжаты.
С помощью этой утилиты можно сжимать только обычные файлы. Символические ссылки игнорируются.
Синтаксис
gzip [опция] [файл]
Опции
- -c, --stdout
- Печатать в стандартный вывод, сохранять исходные файлы без изменений
- -d, --decompress
- Распаковать
- -f, --force
- Принудительно перезаписать выходной файл и сжать ссылки
- -k, --keep
- Сохранить (не удалять) входные файлы
- l, --list
- Вывести содержимое сжатого файла
- -n, --no-name
- Не сохранять и не восстанавливать исходное имя и отметку времени
- -N, --name
- Сохранить или восстановить исходное имя и отметку времени
- -q, --quiet
- Подавить все предупреждения
- -r, --recursive
- Рекурсивно работать с каталогами
- -S, --suffix=SUF
- Использовать суффикс SUF для сжатых файлов
- --synchronous
- Синхронный вывод (безопаснее при сбое системы, но медленнее)
- -t, --test
- Проверить целостность сжатого файла
- -v, --verbose
- Подробный режим
- -1, --fast
- Сжимать быстрее
- -9, --best
- Сжимать лучше
Сжатие файлов с помощью gzip
Работать будем с четырьмя файлами, находящимися в каталоге Directory
:
oleg@mobile:~/Directory:$ ls -l
итого 16
-rw-r--r-- 1 oleg users 806 ноя 1 13:33 usa-capitals-ru.txt
-rw-r--r-- 1 oleg users 1706 ноя 1 13:33 usa-states-capitals.txt
-rw-r--r-- 1 oleg users 1136 ноя 1 13:33 usa-states-ru.txt
-rw-r--r-- 1 oleg users 469 ноя 1 13:33 usa-states.txt
oleg@mobile:~/Directory:$
Без сохранения исходного файла
Чтобы сжать один файл, вызовите команду gzip
, за которой должно следовать имя файла:
oleg@mobile:~/Directory:$ gzip usa-states.txt
Команда создаст файл usa-states.txt.gz
и удалит исходный файл.
Проверяем:
oleg@mobile:~/Directory:$ ls -l
итого 16
-rw-r--r-- 1 oleg users 806 ноя 1 13:33 usa-capitals-ru.txt
-rw-r--r-- 1 oleg users 1706 ноя 1 13:33 usa-states-capitals.txt
-rw-r--r-- 1 oleg users 1136 ноя 1 13:33 usa-states-ru.txt
-rw-r--r-- 1 oleg users 326 ноя 1 13:33 usa-states.txt.gz
oleg@mobile:~/Directory:$
По умолчанию gzip
сохраняет временную метку, режим, владельца и имя исходного файла в сжатом файле.
С сохранением исходного файла
Если вы хотите сохранить входной (исходный) файл, используйте опцию -k
:
oleg@mobile:~/Directory:$ gzip -k usa-capitals-ru.txt
Смотрим результат:
oleg@mobile:~/Directory:$ ls -l
итого 20
-rw-r--r-- 1 oleg users 806 ноя 1 13:33 usa-capitals-ru.txt
-rw-r--r-- 1 oleg users 433 ноя 1 13:33 usa-capitals-ru.txt.gz
-rw-r--r-- 1 oleg users 1706 ноя 1 13:33 usa-states-capitals.txt
-rw-r--r-- 1 oleg users 1136 ноя 1 13:33 usa-states-ru.txt
-rw-r--r-- 1 oleg users 326 ноя 1 13:33 usa-states.txt.gz
oleg@mobile:~/Directory:$
Другой вариант сохранения исходного файла — использование опции -c
, которая указывает gzip
на запись в стандартный вывод и перенаправление вывода в файл:
oleg@mobile:~/Directory:$ gzip -c usa-states-ru.txt > usa-states-ru.txt.gz
Результат:
oleg@mobile:~/Directory:$ ls -l
итого 24
-rw-r--r-- 1 oleg users 806 ноя 1 13:33 usa-capitals-ru.txt
-rw-r--r-- 1 oleg users 433 ноя 1 13:33 usa-capitals-ru.txt.gz
-rw-r--r-- 1 oleg users 1706 ноя 1 13:33 usa-states-capitals.txt
-rw-r--r-- 1 oleg users 1136 ноя 1 13:33 usa-states-ru.txt
-rw-r--r-- 1 oleg users 580 ноя 1 14:40 usa-states-ru.txt.gz
-rw-r--r-- 1 oleg users 326 ноя 1 13:33 usa-states.txt.gz
oleg@mobile:~/Directory:$
Подробный вывод
Используйте опцию -v
, если вы хотите увидеть процентное уменьшение и имена обрабатываемых файлов:
oleg@mobile:~/Directory:$ gzip -v usa-states-capitals.txt
usa-states-capitals.txt: 56.1% -- replaced with usa-states-capitals.txt.gz
oleg@mobile:~/Directory:$
Сжатие нескольких файлов
Обновляем содержимое каталога и проверяем:
oleg@mobile:~/Directory:$ cp ../Directory_1/*.txt .
oleg@mobile:~/Directory:$ ls -l
итого 16
-rw-r--r-- 1 oleg users 806 ноя 1 14:51 usa-capitals-ru.txt
-rw-r--r-- 1 oleg users 1706 ноя 1 14:51 usa-states-capitals.txt
-rw-r--r-- 1 oleg users 1136 ноя 1 14:51 usa-states-ru.txt
-rw-r--r-- 1 oleg users 469 ноя 1 14:51 usa-states.txt
oleg@mobile:~/Directory:$
Вы также можете передать несколько файлов в качестве аргументов команде. Например, чтобы сжать файлы с именами usa-capitals-ru.txt
, usa-states-capitals.txt
, вы должны выполнить следующую команду:
oleg@mobile:~/Directory:$ gzip usa-capitals-ru.txt usa-states-capitals.txt
Приведенная выше команда создаст два сжатых файла: usa-capitals-ru.txt.gz
, usa-states-capitals.txt.gz
:
oleg@mobile:~/Directory:$ ls -l
итого 16
-rw-r--r-- 1 oleg users 433 ноя 1 14:51 usa-capitals-ru.txt.gz
-rw-r--r-- 1 oleg users 791 ноя 1 14:51 usa-states-capitals.txt.gz
-rw-r--r-- 1 oleg users 1136 ноя 1 14:51 usa-states-ru.txt
-rw-r--r-- 1 oleg users 469 ноя 1 14:51 usa-states.txt
oleg@mobile:~/Directory:$
Сжатие всех файлов в каталоге
Обновляем содержимое каталога, а затем сжимаем все файлы , используя опцию -r
:
oleg@mobile:~/Directory:$ cp ../Directory_1/*.txt .
oleg@mobile:~/Directory:$ ls -l
итого 16
-rw-r--r-- 1 oleg users 806 ноя 1 14:56 usa-capitals-ru.txt
-rw-r--r-- 1 oleg users 1706 ноя 1 14:56 usa-states-capitals.txt
-rw-r--r-- 1 oleg users 1136 ноя 1 14:56 usa-states-ru.txt
-rw-r--r-- 1 oleg users 469 ноя 1 14:56 usa-states.txt
oleg@mobile:~/Directory:$ gzip -r .
oleg@mobile:~/Directory:$ ls -l
итого 16
-rw-r--r-- 1 oleg users 433 ноя 1 14:56 usa-capitals-ru.txt.gz
-rw-r--r-- 1 oleg users 791 ноя 1 14:56 usa-states-capitals.txt.gz
-rw-r--r-- 1 oleg users 580 ноя 1 14:56 usa-states-ru.txt.gz
-rw-r--r-- 1 oleg users 326 ноя 1 14:56 usa-states.txt.gz
oleg@mobile:~/Directory:$
gzip
будет рекурсивно проходить через всю структуру каталогов и сжимать все файлы в каталоге и его подкаталогах.
Изменение степени сжатия
gzip
позволяет указать диапазон степеней сжатия от 1 до 9. -1
или --fast
означает самую высокую скорость сжатия с минимальной степенью сжатия, -9
или --best
указывает самую медленную скорость сжатия с максимальной степенью сжатия. Степень сжатия по умолчанию — -6
.
Например, чтобы получить максимальное сжатие, вы должны запустить:
$ gzip -9 filename
Сжатие — это задача с интенсивным использованием ЦП, чем выше степень сжатия, тем больше времени занимает процесс.
Использование стандартного ввода
Чтобы создать файл .gz
из стандартного ввода, направьте вывод команды в gzip
. Например, чтобы создать сжатую резервную копию базы данных MySQL, вы должны запустить:
oleg@mobile:~/Directory:$ sudo mysqldump -u oleg -p linuxcookbookru | gzip -c > linuxcookbookru.sql.gz
Enter password:
oleg@mobile:~/Directory:$
Вывод mysqldump
команды будет вводом для gzip
.
Результат:
oleg@mobile:~/Directory:$ ls -l
итого 21928
-rw-r--r-- 1 oleg users 22432972 ноя 1 15:05 linuxcookbookru.sql.gz
-rw-r--r-- 1 oleg users 433 ноя 1 14:56 usa-capitals-ru.txt.gz
-rw-r--r-- 1 oleg users 791 ноя 1 14:56 usa-states-capitals.txt.gz
-rw-r--r-- 1 oleg users 580 ноя 1 14:56 usa-states-ru.txt.gz
-rw-r--r-- 1 oleg users 326 ноя 1 14:56 usa-states.txt.gz
oleg@mobile:~/Directory:$
Распаковка файлов с помощью gzip
Без сохранения сжатого файла
Чтобы распаковать .gz
файл, используйте опцию -d
:
oleg@mobile:~/Directory:$ gzip -d linuxcookbookru.sql.gz
Другая команда, которую вы можете использовать для распаковки файла, — это gunzip
. Эта команда в основном является псевдонимом gzip -d
:
oleg@mobile:~/Directory:$ gunzip usa-states.txt.gz
Смотрим результаты двух последних операций:
oleg@mobile:~/Directory:$ ls -l
итого 96164
-rw-r--r-- 1 oleg users 98445988 ноя 1 15:05 linuxcookbookru.sql
-rw-r--r-- 1 oleg users 433 ноя 1 14:56 usa-capitals-ru.txt.gz
-rw-r--r-- 1 oleg users 791 ноя 1 14:56 usa-states-capitals.txt.gz
-rw-r--r-- 1 oleg users 580 ноя 1 14:56 usa-states-ru.txt.gz
-rw-r--r-- 1 oleg users 469 ноя 1 14:56 usa-states.txt
oleg@mobile:~/Directory:$
Возможно, вам будет легче запомнить gunzip
чем gzip -d
.
С сохранением сжатого файла
Так же, как и при сжатии файла, опция -k
указывает gzip
сохранить входной файл, в данном случае это сжатый файл:
oleg@mobile:~/Directory:$ gzip -dk usa-states-ru.txt.gz
Результат:
oleg@mobile:~/Directory:$ ls -l
итого 96164
-rw-r--r-- 1 oleg users 98445988 ноя 1 15:05 linuxcookbookru.sql
-rw-r--r-- 1 oleg users 433 ноя 1 14:56 usa-capitals-ru.txt.gz
-rw-r--r-- 1 oleg users 791 ноя 1 14:56 usa-states-capitals.txt.gz
-rw-r--r-- 1 oleg users 1136 ноя 1 14:56 usa-states-ru.txt
-rw-r--r-- 1 oleg users 580 ноя 1 14:56 usa-states-ru.txt.gz
-rw-r--r-- 1 oleg users 469 ноя 1 14:56 usa-states.txt
oleg@mobile:~/Directory:$
Распаковка нескольких файлов
Чтобы распаковать несколько файлов одновременно, передайте имена файлов в gzip
в качестве аргументов:
oleg@mobile:~/Directory:$ gzip -d usa-capitals-ru.txt.gz usa-states-capitals.txt.gz
Распаковка всех файлов в каталоге
При использовании с опциями -d
и -r
gzip
рекурсивно распаковывает все файлы в заданном каталоге:
oleg@mobile:~/Directory:$ gzip -dr .
Список содержимого сжатого файла
При использовании с опцией -l
gzip
показывает статистику о данных сжатых файлах. Вывод будет включать имя несжатого файла, сжатый и несжатый размер и степень сжатия:
oleg@mobile:~/Directory:$ gzip -l usa-states-ru.txt.gz
compressed uncompressed ratio uncompressed_name
580 1136 52.1% usa-states-ru.txt
oleg@mobile:~/Directory:$
Чтобы получить больше информации, добавьте опцию -v
:
oleg@mobile:~/Directory:$ gzip -lv usa-states-ru.txt.gz
method crc date time compressed uncompressed ratio uncompressed_name
defla 215202e6 Nov 1 14:56 580 1136 52.1% usa-states-ru.txt
oleg@mobile:~/Directory:$
Заключение
Команда gzip
Linux позволяет сжимать и распаковывать файлы. С помощью этой утилиты вы можете уменьшить размер заданного файла.