GZIP(1)

НАИМЕНОВАНИЕ
gzip, gunzip, zcat — сжать или восстановить файлы

ОБЗОР
gzip [ -acdfhklLnNrtvV19 ] [-S суффикс] [ имя ... ]
gunzip [ -acfhklLnNrtvV ] [-S суффикс] [ имя ... ]
zcat [ -fhLV ] [ имя ... ]

ОПИСАНИЕ
Команда gzip уменьшает размер указанных файлов, используя кодирование Лемпеля — Зива (LZ77). Каждый файл по возможности заменяется новым с расширением .gz, сохраняя при этом свои атрибуты владения, а также времена доступа и изменения (для MSDOS, OS/2 FAT, Windows NT FAT и Atari по умолчанию используется расширение z). Если файлы не указаны или имя файла задано как «-», данные из стандартного потока ввода сжимаются и отправляются в стандартный поток вывода. Команда gzip попытается сжать только обычные файлы. В частности, она проигнорирует символьные ссылки.

Если длина имени сжатого файла слишком велика для файловой системы, в которой он находится, gzip сокращает имя. Команда gzip пытается сократить в имени файла только части длиннее 3 символов (части имени разделяются точками). Если имя состоит только из коротких частей, сокращаются наиболее длинные из них. Например, если длина имени файла ограничена 14 символами, gzip.msdos.exe будет сжат и записан в gzi.msd.exe.gz. Имена не подлежат сокращению в системах, которые не имеют ограничений на длину имени файла.

По умолчанию gzip сохраняет имя и временную метку исходного файла в сжатом файле. Эти данные используются при восстановлении файла с помощью параметра -N. Данная возможность полезна в случаях, когда имя сжатого файла было сокращено или не удалось сохранить временную метку при передаче файла.

Сжатые файлы могут быть восстановлены в своём первоначальном виде с помощью gzip -d, gunzip или zcat. Если оригинальное имя, сохранённое в сжатом файле, не соответствует требованиям его файловой системы, то на основе этого имени формируется новое, допустимое для использования.

gunzip принимает список файлов из командной строки и заменяет каждый файл, имя которого заканчивается на .gz, -gz, .z, -z или _z (независимо от регистра), а содержимое начинается с правильного магического числа, на восстановленный файл без первоначального расширения. gunzip также распознаёт специальные расширения .tgz и .taz в качестве сокращений .tar.gz и .tar.Z соответственно. В процессе сжатия gzip при необходимости использует расширение .tgz вместо сокращения имени файла с расширением .tar.

В настоящее время gunzip может восстанавливать файлы, созданные с помощью gzip, zip, compress, compress -H или pack. Определение формата входных данных происходит автоматически. При использовании первых двух форматов gunzip проверяет 32-битную контрольную сумму CRC. При использовании pack gunzip проверяет размер восстановленных данных. Стандартный формат compress не предусматривает возможность проверки целостности, однако порой gunzip может распознать повреждённый файл .Z. Если при восстановлении файла .Z возникает ошибка, не следует полагать, что данный файл является исправным только потому, что стандартная утилита uncompress не сообщает о проблемах. Обычно это означает, что стандартная утилита uncompress не проверяет свои входные данные и формирует повреждённые выходные данные. Формат compress -H от SCO (с методом сжатия lzh) не включает в себя сумму CRC, но тем не менее позволяет проводить некоторые проверки целостности.

Файлы, созданные посредством zip, могут быть восстановлены с помощью gzip только в том случае, если они содержат один элемент, сжатый методом «deflation». Данная возможность предназначена исключительно для удобства преобразования файлов tar.zip в формат tar.gz. Чтобы распаковать zip-файл с единственным элементом, используйте такие команды, как «gunzip <foo.zip» или «gunzip -S .zip foo.zip». Чтобы распаковать zip-файлы с несколькими элементами, используйте unzip вместо gunzip.

Команда zcat идентична команде gunzip -c (в некоторых системах zcat может быть установлена как gzcat, чтобы сохранить изначальную ссылку на compress). zcat восстанавливает содержимое файлов из списка, переданного в командной строке, либо данные из своего стандартного потока ввода, после чего записывает восстановленные данные в стандартный поток вывода. zcat восстанавливает файлы независимо от наличия суффикса .gz при условии, что они содержат правильное магическое число.

Команда gzip использует алгоритм Лемпеля — Зива, применяемый в zip и PKZIP. Получаемая степень сжатия зависит от размера входных данных и распределения одинаковых подстрок. Как правило, такие текстовые данные, как исходный код или текст на английском языке, уменьшаются на 60–70%. Достигаемая степень сжатия обычно существенно превышает таковую при использовании LZW (применяется в compress), кодирования Хаффмана (применяется в pack) и адаптивного кодирования Хаффмана (compact).

Сжатие выполняется всегда, даже если размер полученного в результате сжатия файла немного превышает размер оригинального. В худшем случае превышение будет складываться из нескольких байтов заголовка файла gzip и дополнительных 5 байт на каждый блок размером 32 КиБ или 0,015% от общего размера для больших файлов. Фактическое количество используемых дисковых блоков практически никогда не увеличивается.

Обычно gzip сохраняет режим доступа и временную метку изменения файла при сжатии и восстановлении. При наличии у вас соответствующих полномочий gzip также сохранит владельца и группу файла.

ПАРАМЕТРЫ

-a --ascii
    Текстовый режим ASCII: преобразовывать символы перевода на новую строку, используя локальные соглашения. Данный параметр поддерживается только на некоторых системах, не относящихся к Unix. В MSDOS символы CR LF (возврат каретки и перевод строки) преобразовываются в LF при сжатии, а LF преобразовывается в CR LF в ходе восстановления.

-c --stdout --to-stdout
    Записать выходные данные в стандартный поток вывода и оставить оригинальные файлы без изменений. Если указано несколько входных файлов, выходные данные будут содержать последовательность элементов, сжатых независимо друг от друга. Чтобы получить лучшую степень сжатия, объедините все входные файлы перед сжатием.

-d --decompress --uncompress
    Выполнить восстановление.

-f --force
    Выполнить сжатие или восстановление принудительно, даже если с файлом связано несколько ссылок, соответствующий файл уже существует либо сжатые данные считываются из терминала или выводятся в него. Если входные данные имеют формат, не распознаваемый gzip, а также указан параметр --stdout, скопировать входные данные в стандартный поток вывода без изменений, позволив zcat вести себя подобно cat. Если параметр -f не указан и gzip не запущен в фоновом режиме, при обнаружении существующих файлов будет запрошено подтверждение их перезаписи.

-h --help
    Отобразить справочную информацию и завершить работу.

-k --keep
    Оставлять (не удалять) входные файлы в ходе сжатия или восстановления.

-l --list
    Для каждого сжатого файла перечислить следующие поля:

        размер compressed: размер сжатого файла
        размер uncompressed: размер несжатого файла
        ratio: степень сжатия (0.0%, если степень неизвестна)
        uncompressed_name: имя файла до сжатия

    Размер несжатого файла указывается как -1 для файлов в формате, отличном от gzip, таких как файлы .Z. Чтобы получить размер таких файлов до сжатия, вы можете использовать следующую команду:

        zcat file.Z | wc -c

    В сочетании с параметром --verbose также отображаются следующие поля:

        method: метод сжатия
        crc: 32-битная сумма CRC для несжатых данных
        date и time: временная метка файла до сжатия

    В настоящее время поддерживаются методы сжатия deflate, compress, lzh (SCO compress -H) и pack. Поле crc содержит ffffffff для файлов в формате, отличном от gzip.

    Если указан параметр --name, в качестве имени, даты и времени файла до сжатия используются данные, сохранённые в сжатом файле, при их наличии.

    Если указан параметр --verbose, будут также отображены итоговые размеры и степень сжатия для всех файлов, за исключением случаев, когда размеры некоторых файлов неизвестны. Если указан параметр --quiet, заголовки и строки с итогами не отображаются.

-L --license
    Отобразить информацию о лицензии gzip и завершить работу.

-n --no-name
    При сжатии по умолчанию не сохранять имя и временную метку исходного файла (имя исходного файла всегда сохраняется, если осуществлялось сокращение имени). При восстановлении файла не восстанавливать исходное имя (вместо этого просто удалить суффикс gzip из имени сжатого файла) и его временную метку (вместо этого скопировать временную метку сжатого файла), даже если эти данные присутствуют в файле. При восстановлении данный параметр используется по умолчанию.

-N --name
    При сжатии всегда сохранять имя исходного файла, а также сохранять секунды временной метки его изменения при условии, что исходный файл является обычным файлом и его временная метка не меньше 1 (1970-01-01 00:00:01 UTC) и меньше 2**32 (2106-02-07 06:28:16 UTC без учёта секунд координации); данный параметр используется по умолчанию. При восстановлении файла восстанавливать сохранённые имя файла и временную метку при их наличии. Данный параметр полезен для систем с ограничениями на длину имени файла, а также в ситуациях, когда временная метка была утеряна вследствие передачи файла.

-q --quiet
    Не выводить предупреждения.

-r --recursive
    Рекурсивно перемещаться по структуре каталогов. Если какие-либо из файлов, указанных в командной строке, являются каталогами, gzip перейдёт в них и выполнит сжатие (в случае использования gunzip — восстановление) всех обнаруженных там файлов.

-S .суф --suffix .суф
    При сжатии использовать суффикс .суф вместо .gz. В качестве суффикса может быть указана любая непустая строка, однако следует избегать использования суффиксов, отличных от .z и .gz, чтобы не допустить путаницу при передаче файлов в другие системы.

    При восстановлении добавить .суф в начало списка суффиксов, которые могут быть использованы при получении имени выходного файла из имени входного файла.

--synchronous
    Использовать синхронный вывод. При использовании данного параметра вероятность потери выводимых gzip данных в случае системного сбоя снижается, однако работа утилиты может существенно замедлиться.

-t --test
    Проверка. Выполнить проверку целостности сжатого файла и завершить работу.

-v --verbose
    Подробный вывод. Отображать имя и степень сжатия для каждого сжимаемого или восстанавливаемого файла.

-V --version
    Версия. Отобразить номер версии и параметры компиляции, после чего завершить работу.

-# --fast --best
    Задать скорость сжатия в соответствии с указанной цифрой #, при этом -1 или --fast указывает на самый быстрый метод сжатия (с меньшей степенью), а -9 или --best указывает на самый медленный метод сжатия (с наибольшей степенью). По умолчанию используется уровень сжатия -6 (то есть уклон в сторону высокой степени сжатия в ущерб скорости).

--rsyncable
    При синхронизации сжатого файла между двумя компьютерами данный параметр позволяет rsync передавать не весь архив целиком, а только те файлы в архиве, которые были изменены. Обычно, после того как какой-либо из файлов в архиве был изменён, алгоритм сжатия может сформировать новую версию архива, которая не будет совпадать с предыдущей. В этом случае rsync выполнит передачу новой версии архива целиком на удалённый компьютер. Использование данного параметра позволяет rsync передавать только изменённые файлы, а также небольшое количество метаданных, необходимых для обновления структуры архива в той области, где произошли изменения.

ПРОДВИНУТОЕ ИСПОЛЬЗОВАНИЕ
Несколько сжатых файлов могут быть объединены. В этом случае gunzip будет извлекать все элементы вместе. Например:

      gzip -c файл1 > foo.gz
      gzip -c файл2 >> foo.gz

и следом

      gunzip -c foo

равнозначно

      cat файл1 файл2

В случае повреждения одного из элементов файла .gz остальные элементы остаются доступными для восстановления (при условии, что повреждённый элемент был удалён). Однако вы можете добиться лучшего сжатия, сжимая все элементы сразу:

      cat файл1 файл2 | gzip > foo.gz

позволяет получить более высокую степень сжатия, чем

      gzip -c файл1 файл2 > foo.gz

Если вы хотите сжать объединённые файлы повторно, чтобы достичь лучшей степени сжатия, выполните:

      gzip -cd старый.gz | gzip > новый.gz

Если сжатый файл состоит из нескольких элементов, размер до сжатия и сумма CRC, сообщаемые параметром --list, будут относиться только к последнему элементу. Если вам необходимо получить размер до сжатия для всех элементов, вы можете использовать следующую команду:

      gzip -cd файл.gz | wc -c

Если вы хотите создать один архивный файл с несколькими элементами, которые впоследствии могли бы быть извлечены независимо друг от друга, используйте архиватор, такой как tar или zip. GNU tar поддерживает параметр -z, позволяющий вызывать gzip прозрачно для пользователя. gzip разработан как дополнение к tar, а не как замена ему.

СРЕДА ОКРУЖЕНИЯ
Устаревшая переменная среды GZIP может содержать набор параметров по умолчанию для gzip. Эти параметры обрабатываются первыми и могут быть перезаписаны параметрами, явно заданными в командной строке. В связи с тем, что подобное поведение может вызвать проблемы при использовании сценариев, данная возможность поддерживается только для параметров, вероятность вреда от которых достаточно невелика, и gzip выводит предупреждение при её использовании. Данная возможность будет удалена в следующем выпуске gzip.

В качестве альтернативы вы можете использовать псевдоним или сценарий. Например, если gzip находится в каталоге /usr/bin, вы можете добавить $HOME/bin в начало вашей переменной PATH и создать исполняемый сценарий $HOME/bin/gzip со следующим содержимым:

      #! /bin/sh
      export PATH=/usr/bin
      exec gzip -9 "$@"

СМОТРИТЕ ТАКЖЕ
znew(1), zcmp(1), zmore(1), zforce(1), gzexe(1), zip(1), unzip(1), compress(1)

Спецификация файла формата gzip представлена в P. Deutsch, GZIP file format specification version 4.3, <https://www.ietf.org/rfc/rfc1952.txt>, Internet RFC 1952 (май 1996). Спецификация формата «deflation» для zip представлена в P. Deutsch, DEFLATE Compressed Data Format Specification version 1.3, <https://www.ietf.org/rfc/rfc1951.txt>, Internet RFC 1951 (май 1996).

ДИАГНОСТИКА
Код нормального завершения равен 0; в случае возникновения ошибки код завершения равен 1. При возникновении предупреждения код завершения равен 2.

Usage: gzip [-cdfhklLnNrtvV19] [-S suffix] [file ...]
    В командной строке были указаны неверные параметры.

файл: not in gzip format
    Файл, указанный при вызове gunzip, не является сжатым.

файл: Corrupt input.
    Use zcat to recover some data. Сжатый файл был повреждён. Данные, содержащиеся до позиции, в которой произошёл сбой, могут быть восстановлены с помощью

          zcat файл > восстановленные_данные

файл: compressed with xx bits, can only handle yy bits
    Файл был сжат программой (с использованием LZW), которая могла работать с бо́льшим количеством битов, чем код для восстановления, используемый на данной машине. Сожмите файл повторно, используя программу gzip, которая сжимает данные лучше и потребляет меньше памяти.

файл: already has .gz suffix -- unchanged
    Предполагается, что файл уже сжат. Переименуйте файл и попробуйте снова.

файл already exists; do you wish to overwrite (y or n)?
    Ответьте «y», если хотите перезаписать существующий выходной файл, в противном случае ответьте «n».

gunzip: corrupt input
    Было обнаружено нарушение SIGSEGV, что обычно свидетельствует о повреждении входного файла.

xx.x% Percentage of the input saved by compression.
    (Актуально только для параметров -v и -l.)

-- not a regular file or directory: ignored
    Если входной файл не является обычным файлом или каталогом (а является, например, символьной ссылкой, сокетом, каналом FIFO или файлом устройства), он остаётся без изменений.

-- has xx other links: unchanged
    Входной файл имеет связанные с ним ссылки и оставлен без изменений. См. ln(1) для получения дополнительной информации. Используйте флаг -f для принудительного сжатия файлов с несколькими ссылками.

ПРЕДОСТЕРЕЖЕНИЯ И РЕКОМЕНДАЦИИ
При записи сжатых данных на ленту обычно возникает необходимость дополнять выходные данные нулями до границы блока. Когда эти данные считываются и блок целиком передаётся gunzip для восстановления, gunzip обнаруживает наличие «мусора», следующего за сжатыми данными, и по умолчанию выводит предупреждение. Вы можете использовать параметр --quiet для подавления таких предупреждений.

ОШИБКИ
В редких случаях параметр --best даёт худшие результаты сжатия, чем уровень сжатия по умолчанию (-6). Для некоторых файлов с высокой степенью избыточности compress обеспечивает лучшие показатели сжатия, чем gzip.

ИНФОРМАЦИЯ ОБ ОШИБКАХ
Сообщайте об ошибках по адресу bug-gzip@gnu.org
Домашняя страница GNU gzip: <https://www.gnu.org/software/gzip/>
Общая помощь по использованию программного обеспечения GNU: <https://www.gnu.org/software/gethelp.ru.html>

УВЕДОМЛЕНИЕ ОБ АВТОРСКИХ ПРАВАХ
Copyright © 1998–1999, 2001–2002, 2012, 2015–2023 Free Software Foundation, Inc.
Copyright © 1992, 1993 Jean-loup Gailly

Предоставляется разрешение на изготовление и распространение дословных копий данного руководства при условии, что на всех копиях сохранено уведомление об авторских правах и настоящее уведомление о разрешении.

Предоставляется разрешение на копирование и распространение изменённых версий данного руководства на тех же условиях, что и при дословном копировании, при условии, что вся полученная в результате производная работа распространяется на условиях уведомления о разрешении, идентичного настоящему.

Предоставляется разрешение на копирование и распространение переводов данного руководства на другой язык на тех же условиях, что указаны выше для изменённых версий, за исключением того, что настоящее уведомление о разрешении может быть указано в переводе, одобренном Фондом.

ПЕРЕВОД
Русский перевод этой страницы руководства разработал(и) Андрей Догадкин <adogadkin@outlook.com> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков (<debian-l10n-russian@lists.debian.org>).