Команда gzip в Linux

Опубликовано admin - вт, 11/01/2022 - 15:58

В Linux команда gzip предназначена для сжатия данных без потерь с помощью одноименной утилиты, цель использования которой — экономия дискового пространства.

Использование команды gzip в Linux

Содержание


Введение

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 позволяет сжимать и распаковывать файлы. С помощью этой утилиты вы можете уменьшить размер заданного файла.

Поделиться с друзьями