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