GZIP(1)

НАЗВА
gzip, gunzip, zcat — стискання або розпаковування файлів

КОРОТКИЙ ОПИС
gzip [ -acdfhklLnNrtvV19 ] [-S суфікс] [ назва ... ]
gunzip [ -acfhklLnNrtvV ] [-S суфікс] [ назва ... ]
zcat [ -fhLV ] [ назва ... ]

ОПИС
Команда gzip зменшує розмір названого файла за допомогою кодування Лемпеля-Зіва (LZ77). Коли це можливо, кожен файл буде замінено файлом з суфіксом .gz зі збереженням режиму доступу, власника, доступу та час внесення змін. (Типовим суфіксом є z для MSDOS, OS/2 FAT, Windows NT FAT та Atari.) Якщо файл не вказано, або якщо назвою файла є «-», дані зі стандартного джерела вхідних даних буде стиснуто до стандартного виведення. Команда 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, не варто вважати файл .Z є коректним просто тому, що стандартна uncompress не скаржиться при розпакуванні. Загалом, це просто означає, що стандартна uncompress не перевіряє вхідні дані і без проблем виводить помилкові дані. Формат стискання SCO compress -H (спосіб стискання lzh) не включає CRC, але також можливі певні перевірки цілісності.

Файли, які створено zip, може бути розпаковано gzip, лише якщо у них є один елемент, який стиснуто із використанням методу «deflation». Цю можливість призначено лише для полегшення перетворення файлів tar.zip до формату tar.gz. Щоб видобути дані з файла zip із одним елементом, скористайтеся рядком команди, подібним до «gunzip <щось.zip» або «gunzip -S .zip щось.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 зберігає режим доступу та часові позначки внесення змін файлів під час стискання або розпаковування. Якщо у вас є відповідні привілеї, програма також зберігає власника файла і групу.

ПАРАМЕТРИ

-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 size: розмір стисненого файла
        uncompressed size: розмір розпакованого файла
        ratio: рівень стискання (0.0%, якщо невідомий)
        uncompressed_name: назва розпакованого файла Розмір розпакованого файла буде показано як -1 для файлів, які збережено не у форматі gzip, зокрема стиснених файлів .Z. Щоб отримати розмір розпакованих файлів для таких файлів, можете скористатися такою командою:
        zcat файл.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 > щось.gz
      gzip -c файл2 >> щось.gz Потім
      gunzip -c щось еквівалент
      cat файл1 файл2 Якщо буде пошкоджено один із записів архіву .gz, інші записи все ще можна буде відновити (якщо вилучити пошкоджений запис). Втім, ви можете отримати вищий рівень стискання, якщо усі записи буде стиснуто одразу:
      cat файл1 файл2 | gzip > щось.gz стискає краще за
      gzip -c файл1 файл2 > щось.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 версії 4.3, <https://www.ietf.org/rfc/rfc1952.txt>, Internet RFC 1952 (травень 1996 року). Формат стискання zip визначено П. Дойчем у специфікації стисненого формату даних DEFLATE версії 1.3, <https://www.ietf.org/rfc/rfc1951.txt>, Internet RFC 1951 (травень 1996 року).

ДІАГНОСТИКА
Звичайним станом виходу є 0; якщо станеться помилка, станом виходу буде 1. Якщо програма про щось вас попереджатиме, станом виходу буде 2.

Користування: gzip [-cdfhklLnNrtvV19] [-S суфікс] [файл ...]
    У рядку команди було вказано некоректні параметри.

файл: не у форматі gzip
    Файл, який вказано gunzip, не було стиснуто.

файл: пошкоджені вхідні дані.
    Скористайтеся zcat для відновлення частини даних. Стиснений файл пошкоджено. Дані, аж до місця пошкодження, можна відновити за допомогою команди
          zcat файл > recover

файл: стиснуто з xx бітів, можлива обробка лише yy бітів
    Файл було стиснуто (за допомогою LZW) програмою, яка не може обробляти більше бітів, ніж може обробити код розпакування у вашій системі. Перепакуйте файл за допомогою gzip, програми, яка стискає краще і використовує менше пам'яті.

file: вже має суфікс .gz -- не змінено
    Здається, файл вже стиснуто. Перейменуйте файл і повторіть спробу.

файл вже існує; хочете його перезаписати (y (так) або n (ні))?
    Дайте відповідь «y», якщо ви хочете замінити файл-результат, і відповідь «n», якщо ні.

gunzip: пошкоджені вхідні дані
    Було виявлено порушення SIGSEGV, що, зазвичай, означає, що файл вхідних даних було пошкоджено.

xx.x% частка вхідних даних, яку було заощаджено шляхом стискання.
    (Стосується лише -v і -l.)

-- не є звичайним файлом або каталогом: буде проігноровано
    Коли файл вхідних даних не є звичайним файлом або каталогом (наприклад, є символічним посиланням, сокетом, FIFO, файлом пристрою), попередження виведено не буде.

-- має xx інших посилань: не змінено
    На файл вхідних даних існують посилання; файл не буде змінено. Див. 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/gethelp/>

ЗАУВАЖЕННЯ ЩОДО АВТОРСЬКИХ ПРАВ
Авторські права належать © Free Software Foundation, Inc., 1998–1999, 2001–2002, 2012, 2015–2023
Авторські права належать © Jean-loup Gailly, 1992, 1993

Цей підручник можна копіювати без змін і поширювати, якщо в усіх копіях збережено запис про авторські права та цей запис про можливість копіювання.

Цей підручник можна копіювати, вносити до копії зміни і поширювати створені копії, якщо виконано умови копіювання без змін, а уся похідна робота повинна поширюватися за тих самих умов, що і цей підручник.

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

ПЕРЕКЛАД
Український переклад цієї сторінки посібника виконано Andriy Rysin <arysin@gmail.com> і Yuri Chornoivan <yurchor@ukr.net>

Цей переклад є безкоштовною документацією; будь ласка, ознайомтеся з умовами GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html). НЕ НАДАЄТЬСЯ ЖОДНИХ ГАРАНТІЙ.

Якщо ви знайшли помилки у перекладі цієї сторінки підручника, будь ласка, надішліть електронний лист до списку листування перекладачів: trans-uk@lists.fedoraproject.org.