Назва
gzip, gunzip, zcat - стискають і розширюють файли
Використання
gzip [ -acdfhlLnNrtvV19 ] [-S суфікс] [ назва ... ]
gunzip [ -acfhlLnNrtvV ] [-S суфікс] [ назва ... ]
zcat [ -fhLV ] [ назва ... ]
Опис
Програма gzip зменшує розмір вказаних їй файлів, використовуючи алгоритм Lempel-Ziv (LZ77). По можливості, кожний файл заміняється новим з розширенням .gz', одночасно зберігаючи власника та режим доступу, а також час доступу та модифікації. (Стандартними розширеннями являються
-gz' для VMS, і 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' або
.Z', і який починається з правильного магічного числа, на розтиснутий файл без одного з цих суфіксів. gunzip також розпізнає спеціальні розширення .tgz' і
.taz', як скорочення від .tar.gz' і
.tar.Z', відповідно. Під час стиснення, gzip може використати розширення .tgz', якщо необхідно, замість скорочення назви файлу з розширенням
.tar'.
На сьогодення, gunzip в змозі розтискати файли, створені gzip, ?zip(1), compress(1), compress -H', або <span class="createlink"><a href="/cgi-bin/ikiwiki.cgi?page=man%2Fman1%2Fpack.1&from=man%2Fman1%2Fgzip.1&do=create" rel="nofollow">?</a>**pack**(1)</span>. Виявлення формату вводу є автоматичним. При використанні перших двох форматів, **gunzip** перевіряє на наявність 32-бітного CRC. У випадку з <span class="createlink"><a href="/cgi-bin/ikiwiki.cgi?page=man%2Fman1%2Fpack.1&from=man%2Fman1%2Fgzip.1&do=create" rel="nofollow">?</a>**pack**(1)</span>, **gunzip** перевіряє довжину розтисненого файлу. Стандартний формати стискання не дозволяє перевірку узгодженості, проте **gunzip** іноді в змозі виявити поганий
.Z'-файл. Якщо ви отримаєте помилку під час розтиску .Z'-файлу, не гадайте, що із
.Z'-файлом все гаразд тільки тому, що стандартний ?uncompress(1), не жаліється. Це скоріше означає, що ?uncompress(1) не перевіряє власного вводу на помилки, і радо генерує вивід-непотріб. Формат `compress -H', використовуваний SCO (lzh-метода стиснення), не включає CRC, але дозволяє певну перевірку на узгодженість.
Файли, створені ?zip(1) можна розтиснути gzip тільки коли мають єдиний елемент, стиснутий способом здуття (deflation). Ця риса існує тільки задля того, щоб полегшити перетворення файлів формату tar.zip на tar.gz. Щоб видобути zip-файли з декількома елементами, скористайтеся з ?unzip(1), замість gunzip.
zcat є тотожним gunzip -c'. (На деяких системах, **zcat** може бути інстальовано як **gzcat**, щоб зберегти оригінальне посилання на **compress**.) **zcat** розтискає або список файлів на командному рядку, або стандартний ввід, і записує розтиснені дані на стандартний пристрій виводу. **zcat** оброблятиме тільки ті файли, що містять правильне магічне число, незалежно від того, чи включає їхня назва суфікс
.gz', чи ні.
gzip застосовує алгоритм Lempel-Ziv, використовуваний у zip і PKZIP. Рівень стискання залежить від кількості вводу та поширеності однакових підланцюжків. Типово, англійський текст, або вихідний код зменшується в розмірі на 60-70%. Загалом, результати набагато кращі за LZW (використовуваного в ?comress(1)), алгоритму Huffman (використовуваного в ?pack(1)), або адаптованого алгоритму Huffman (?compact(1)).
Спроба стиснення завжди відбувається, навіть якщо стиснений файл виявиться трохи більшим за розміром за оригінальний. Найбільше, що може додати до розміру стисненого файлу, це декілька байтів заголовку gzip-файлу, плюс 5 байтів кожних 32-кілобайтових блоки, або коефіцієнт розширення, рівний 0.015%, для великих файлів. Зауважте, що дійсна кількість використовуваних дискових блоків майже ніколи не збільшується. gzip зберігає набір дозволів, власника та часові мітки файлів під час стиснення та розтиску.
Опції
-a --ascii : ASCII-текстовий режим (дивіться ?ascii(7)): перетворює кінці рядків, керуючись локальними умовностями. Ця опція підтримується тільки на деяких не-Юнікс операційних системах. Для MSDOS, CR LF перетворюється на LF під час стиснення, і LF - назад на CR LF, при розтиску.
-c --stdout --to-stdout : Записуватиме вивід до стандартного пристрою виводу; зберігатиме незмінними оригінальні файли. Коли існує декілька файлів вводу, вивід складатиметься з послідовності незалежно-стиснених частин. Щоб добитися кращого стиснення, зчепіть усі файли вводу перед тим як стискати їх.
-d --decompress --uncompress : Розтискання.
-f --force : Примусове стискання або розтиск, навіть якщо файл включає багатократні посилання, або відповідний файл вже існує, або коли стиснені дані зчитуються з або записуються до терміналу. Якщо ввідні дані не знаходяться у форматі, які розпізнає gzip, і якщо задано опцію --stdout, копіює ввідні дані без змін до стандартного виводу - тобто, ?zcat(1) поводитиметься як cat(1). Якщо не задано опції -f, і програма не знаходиться у фоновому режимі, gzip питатиме підтвердження на перезапис вже існуючих файлів.
--help : Виводить допомогу і одразу завершує роботу.
uncompressed: розмір нестисненого файлу
ratio: коефіцієнт стиснення (0.0%, якщо невідомий)
uncompressed_name: назва нестисненного файлу <br /><br /> Розмір нестисненого файлу відображено як -1 для файлів, що не знаходяться у форматі **gzip**, наприклад, стиснені `.Z'-файли. Щоб отримати розмір нестисненого файлу, в такому випадку, ви можете скористатися з <br /><br />
zcat file.Z | wc -c
У поєднанні з опцією --verbose, виводяться також наступні поля:
method: метода стиснення
crc: 32-бітний CRC нестиснених даних
date & time: часова мітка нестисненого файлу <br /><br /> Методами стиснення, підтримуваними на сьогоднішній день, є `deflate', `compress', `lzh' (compress -H в SCO) та `pack'. Значення CRC є рівним ffffffff для файлів, не у форматі **gzip**. <br /><br /> Разом із опцією **--name**, нестиснене ім'я, дата і час дорівнюватимуть тим, що збережено у стисненому файлі, якщо дійсно збережено. <br /><br /> Разом із **--verbose**, виводяться також загальні розміри і коефіцієнт стиснення для всіх файлів, за виключенням, коли деякі розміри невідомі. Разом із **--quiet**, не виводяться заголовок і підсумок.
-l --list
: Для кожного стисненого файлу виводить наступні поля з інформацією:
compressed: розмір стисненого файлу
-L --license : Виведе ліцензію gzip, і одразу завершить роботу програми.
-n --no-name : Під час стиснення, не зберігати назву оригінального файлу і мітку часу. (Оригіналу назву завжди збережено, якщо її необхідно скоротити.) Під час розтиску, не відтворювати оригінальну назву файлу, якщо її було збережено (видаляє тільки суфікс з назви файлу), і не відтворювати оригінальні мітки часу (копіює їх зі стисненого файлу). Ця опція вживається без задання, під час розтиску.
-N --name : При стисненні, завжди зберігати оригінальну назву і часову мітку; вживається без задання. Під час розтиску, відтворить оригінальну назву файлу і мітку часу, якщо присутні. Ця опція корисна у випадку систем з обмеженням довжини назв файлів, або якщо мітки часу втрачено під час передачі файлів.
-q --quiet : Пригнічує всі попередження.
-r --recursive : Рекурсивно проходить ієрархічну структуру каталогу. Якщо якісь назви файлів, заданих на командному рядкові, виявляться каталогами, gzip перейде в цей каталог і стисне всі знайдені там файли (або розтисне їх у випадку gunzip).
gunzip -S "" * (*.* для MSDOS)
Попередні версії gzip використовували суфікс `.z'. Його змінено, щоб запобігти конфліктів із ?pack(1).
-S .суф --suffix .суф
: Використає суфікс .суф замість .gz'. Можна задати будь-який суфікс, але краще уникати суфіксів, відмінних від
.z' і `.gz', щоб запобігти плутанини під час передачі файлів іншим системам. Відсутній суфікс причинить спробу gunzip розтиснути всі наявні файли, незалежно від суфіксу, наприклад:
-t --test : Перевірка цілосності стисненого файлу.
-v --verbose : Багатослівний режим. Виводить назву і процент зміни розміру кожного, стисненого або розтисненого файлу.
-V --version : Виведе версію програми і опції, застосовані під час компіляції, після чого завершить роботу.
-N --fast --best : Регулює швидкість стиснення, якщо вказати число N, де N рівне -1 або --fast означає найшвидшу методу стиснення (менший коефіцієнт ущільнення), і -9, або --best, що позначає найповільнішу методу стиснення (найбільша щільність). Стандартним рівнем стиску є -6 (тобто, ближче до більшого стиснення за рахунок швидкості).
Приклади складнішого використання
Багатократні стиснені файли можна зчепити. В такому випадку, gunzip видобуде всі частини одразу. Наприклад:
gzip -c file1 > foo.gz
gzip -c file2 >> foo.gz
Після чого
gunzip -c foo
тотожне
cat file1 file2
У випадку пошкодження однієї з частин `.gz'-файлу, решту ще можна здобути (якщо вилучити пошкоджену частину). Однак, ви доб'єтеся кращого результату, якщо стиснете всі частини одразу:
cat file1 file2 | gzip > foo.gz
працює краще за
gzip -c file1 file2 > foo.gz
Якщо ви хочете знову стиснути вже стиснений зчеплений файл, для додаткового ущільнення, зробіть
gzip -cd old.gz | gzip > new.gz
Якщо стиснений файл складається з декількох частин, розмір нестисненого файлу та використовуване CRC, про які звітує опція --list, стосуються лише останньої частини. Коли вам потрібні нестиснені розміри всіх частин, можете скористатися з
gzip -cd file.gz | wc -c
Коли ви хочете створити єдиний архівний файл з чисельними членами, які пізніше можна окремо видобути, скористайтеся з архіваторів, таких як tar(1) або ?zip(1). tar від GNU також підтримує опцію -z, що прозоро викличе gzip. Тобто, gzip розроблено як доповнення до архіватору tar(1), а не його заміна.
Середовище
Змінна середовища GZIP може утримувати набір стандартних опцій для gzip. Ці опції інтерпретовано першими, і можна обійти за допомогою явних параметрів командного рядка. Наприклад:
для sh: GZIP="-8v --name"; export GZIP
для csh: setenv GZIP "-8v --name"
для MSDOS: set GZIP=-8v --name
На Vax/VMS, ця змінна називатиметься GZIP_OPT, щоб уникнути збігу зі змінною, що використовується для виклику програми.
Діагностика
Вдалий статус виходу програми дорівнює 0; якщо відбулася помилка, статус виходу дорівнюватиме 1. Якщо попередження - 2. Ви можете отримати наступні повідомлення:
Usage : gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...]: На командному рядку вказано неправильні опції.
file : not in gzip format: Вказаний gzip файл не є стисненим.
file : Corrupt input. Use zcat to recover some data.: Стиснений файл пошкоджено. Для здобуття даних до місця пошкодження, можна використати
zcat file > recover
file : compressed with xx bits, can only handle yy bits: Файл стиснено (за використанням LZW) якоюсь програмою, спроможною обробляти більше бітів, ніж код розтиску на цій машині.
file : already has .gz suffix -- no change: Припускається, що файл вже було стиснено. Змініть назву файлу та спробуйте знову.
file 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 , для блокування попереджень. Цю опцію можна встановити в змінній середовища GZIP:
для sh: GZIP="-q" tar -xfz --block-compress /dev/rst0
для csh: (setenv GZIP -q; tar -xfz --block-compr /dev/rst0
У вищенаведеному прикладі, gzip приховано викликається опцією -z програми tar(1). Впевніться, що tar використовує той самий розмір блоку (опція -b) для читання і запису на стрічковий пристрій. (Цей приклад передбачає, що ви користуєтесь GNU-версією tar.)
Вади
Формат gzip відповідає розмірові вводу, кратному 232, тож опція --list звітує неправильні розміри нестиснених файлів і коефіцієнти стиснення для файлів, нестиснений розмір яких перевищує 4 Гігабайти. Щоб обійти цей недолік, ви можете скористатися з наступної команди, для того, щоб дізнатися про дійсний розмір великого файлу:
zcat file.gz | wc -c
Опція --list також доповідає розміри як рівні -1, а CRC як ffffffff, якщо стиснений файл знаходиться на носієві, недосяжному для пошуку.
Зрідка, опція --best спричиняє до гіршого ущільнення, ні стандартний рівень стиснення (-6). З деякими надзвичайно великими файлами, compress(1) справляється краще за gzip.
Дивіться також
?znew(1), ?zcmp(1), ?zmore(1), ?zforce(1), gzexe(1), ?zip(1), ?unzip(1), compress(1), ?pack(1), ?compact(1)
Формат файлу gzip описано в "P. Deutsch, GZIP file format specification version 4.3", <ftp://ftp.isi.edu/in-notes/rfc1952.txt>, Internet RFC 1952 (Квітень 1996-го року). Формати розтиску описано в "P. Deutsch, DEFLATE Compressed Data Format Specification version 1.3, <ftp://ftp.isi.edu/in-notes/rfc1951.txt>, Internet RFC 1951 (Квітень 1996-го року).