bzip2(1)

НАЗВА
bzip2, bunzip2 — програма для стискання файлів із упорядковуванням блоків, версія 1.0.8
bzcat — розпакувати файли до стандартного виведення
bzip2recover — відновлює дані з пошкоджених файлів bzip2

КОРОТКИЙ ОПИС
bzip2 [ -cdfkqstvzVL123456789 ] [ назви_файлів ... ]
bzip2 [ -h|--help ]
bunzip2 [ -fkvsVL ] [ назви_файлів ... ]
bunzip2 [ -h|--help ]
bzcat [ -s ] [ назви_файлів ... ]
bzcat [ -h|--help ]
bzip2recover назва_файла

ОПИС
bzip2 стискає файли за допомогою алгоритму стискання тексту із упорядкуванням блоків Берроуза-Вілера і кодування Гаффмана. Загалом, стискання є значно кращим за те, яке можна досягти звичайними засобами стискання на основі LZ77/LZ78 і досягає швидкодії сімейства статистичних засобів стискання PPM.

Параметри командного рядка є навмисно дуже подібними до параметрів командного рядка GNU gzip, але вони не є ідентичними.

Прапорці командного рядка у bzip2 має бути поєднано зі списком назв файлів. Кожен файл буде замінено його стисненою версією із назвою «початкова_назва.bz2». Усі стиснуті файли матимуть ту саму дату внесення змін, права доступу і, якщо можливо, власників, що і початковий файл, отже, ці властивості буде належним чином відновлено під час розпакування. Обробка назв файлів є наївною у сенсі того, що немає механізму для збереження початкових назв файлів, прав доступу, власників або дат у файлових системах, де таких понять взагалі немає або які мають серйозні обмеження на довжину назв файлів, як у MS-DOS.

Типово, bzip2 і bunzip2 не перезаписуватимуть наявних файлів. Якщо вам потрібен перезапис, скористайтеся параметром -f.

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

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

       назвафайла.bz2 стане назвафайла
       назвафайла.bz стане назвафайла
       назвафайла.tbz2 стане назвафайла.tar
       назвафайла.tbz стане назвафайла.tar
       якасьіншаназва стане якасьіншаназва.out

Якщо суфікс назви файла не належатиме до одного із відомих програмі, .bz2, .bz, .tbz2 або .tbz, bzip2 поскаржиться, що не може визначити назву початкового файла і скористається початковою назвою із дописуванням суфікса .out.

Як і зі стисканням, якщо не буде вказано назв файлів, відбуватиметься розпаковування зі стандартного джерела вхідних даних до стандартного виведення.

bunzip2 належним чином розпакує файл, який є поєднанням двох або декількох стиснутих файлів. Результатом буде об'єднання відповідних нестиснутих файлів. Передбачено також підтримку перевірки цілісності (-t) об'єднаних стиснених файлів.

Ви також можете стиснути або розпакувати файли до стандартного виведення шляхом задання прапорця -c. У такий спосіб може бути стиснено або розпаковано одразу декілька файлів. Виведені результати буде послідовно надіслано до стандартного виведення. Стискання декількох файлів у цей спосіб створює потік даних, що містить представлення декількох стиснених файлів. Такий потік може бути належним чином розпаковано лише версією bzip2 0.9.0 або новішими версіями. Попередні версії bzip2 зупинять розпакування після першого файла у потоці даних.

bzcat (або bzip2 -dc) розпаковує усі вказані файли до стандартного виведення.

bzip2 читатиме аргументи зі змінних середовища BZIP2 і BZIP, саме у такому порядку, і оброблятиме їх до будь-яких аргументів, які прочитано з рядка команди. Ці змінні є зручним способом надання типових аргументів.

Стискання виконуватиметься завжди, навіть якщо стиснутий файл є дещо більшим за початковий. Файли, розмір яких є меншим за приблизно сотню байтів, зазвичай, стають більшим, оскільки у механізму стискання є стале доповнення об'єму у розмірі 50 байтів. Випадкові дані (включно із виведеними більшістю засобів стискання даними) кодуються із щільністю 8,05 бітів на байт, що дає збільшення об'єму на приблизно 0,5%.

Для самоперевірки і захисту ваших даних bzip2 використовує 32-бітові CRC для забезпечення ідентичності розпакованої версії файла оригіналу. Це охороняє стиснуті дані від пошкодження і невиявлених вад у bzip2 (сподіваємося, дуже малоймовірних). Ймовірність невиявленого пошкодження є дуже низькою, приблизно рівною відношенню одиниці до чотирьох мільярдів для кожного обробленого файла. Зважайте на те, що перевірка виконується при розпакуванні, тому програма може лише повідомити вам, що щось не так. Вона не допоможе вам відновити початкові нестиснені дані. ви можете скористатися bzip2recover, щоб спробувати відновити дані із пошкоджених файлів.

Повернуті значення: 0 для звичайного виходу, 1 для проблем із середовищем (не знайдено файл, некоректні прапорці, помилки введення-виведення тощо), 2 для позначення пошкодженого стиснутого файла, 3 для помилки внутрішньої сумісності (наприклад вади), яка спричиняє паніку bzip2.

ПАРАМЕТРИ

-c --stdout
    Стиснути або видобути у стандартне виведення.

-d --decompress
    Примусове розпакування. Насправді, bzip2, bunzip2 і bzcat це та сама програма, і визначення дії, яку має бути виконано, відбувається на основі використаної назви програми. Цей прапорець надає змогу перевизначити цей механізм і примусити bzip2 до виконання розпакування.

-z --compress
    Доповнення до -d: примусове стискання, незалежно від викликаної назви.

-t --test
    Перевірити цілісність вказаних файлів, але не розпаковувати їх. Насправді, програма виконує тестове розпакування і повідомляє результат.

-f --force
    Примусово перезаписувати виведені файли. Зазвичай, bzip2 не перезаписуватиме наявних виведених файлів. Використання параметра також призведе до примусового розірвання bzip2 жорстких посилань на файли. Без цього параметра програма не розриватиме жорстких посилань.

    Зазвичай, bzip2 відмовляється розпаковувати файли, у яких немає належних байтів контрольної суми у заголовку. Втім, у примусовому режимі (-f) програма передає такі файли без змін. Так поводиться GNU gzip.

-k --keep
    Зберігати (не вилучати) файли вхідних даних під час стискання або розпаковування.

-s --small
    Зменшити використання пам'яті для стискання, розпакування та тестування. Файли буде розпаковано і перевірено за допомогою зміненого алгоритму, який потребує лише 2,5 байтів на блоковий байт. Це означає, щоб будь-який файл можна буде розпакувати у 2300 кБ пам'яті, хоча і у половину звичайної швидкості.

    Під час стискання -s вибирає розмір блоку у 200 кБ, що обмежує використання пам'яті майже до тих самих значень за рахунок коефіцієнта стискання. Якщо коротко, якщо на вашому комп'ютері замало оперативної пам'яті (8 мегабайтів або менше), користуйтеся -s для усього. Див. КЕРУВАННЯ ПАМ'ЯТТЮ нижче.

-q --quiet
    Придушити неважливі повідомлення-попередження. Повідомлення про помилки введення-виведення та інші критичні події не буде придушено.

-v --verbose
    Режим докладних повідомлень — показувати коефіцієнт стискання для усіх оброблених файлів. Додаткові -v збільшують рівень докладності, надаючи доступ до значного масиву інформації, яка, в основному, буде цікавою з метою діагностики.

-h --help
    Вивести короткий текст довідки і завершити роботу.

-L --license -V --version
    Вивести дані щодо версії програми та умов ліцензування.

-1 (або --fast) до -9 (або --best)
    Встановити розмір блоку 100 кБ, 200 кБ ... 900 кБ при стисканні. Не діє при розпаковуванні. Див. КЕРУВАННЯ ПАМ'ЯТТЮ нижче. Альтернативи --fast і --best призначено, в основному, для сумісності з GNU gzip. Зокрема, --fast не робить обробку аж надто швидшою, а --best, фактично, вибирає типову поведінку.

--  Вважати наступні аргументи назвами файлів, навіть якщо вони починаються з дефіса. Цей параметр уможливлює роботу із файлами, назви яких починаються з дефіса. Приклад: bzip2 -- -назва_мого_файла.

--repetitive-fast --repetitive-best
    Ці прапорці є зайвими, починаючи з версії 0.9.5. Вони забезпечували певний грубий контроль над поведінкою алгоритму сортування у ранніх версіях програми, коли він іноді був корисним. У версіях 0.9.5 і новіших було удосконалено алгоритм, що зробило ці прапорці непотрібними.

КЕРУВАННЯ ПАМ'ЯТТЮ
bzip2 стискає великі файли блоками. Розмір блоку впливає на досягнутий коефіцієнт стискання і об'єм пам'яті, потрібний для стискання та розпаковування. Прапорці від -1 до -9 визначають розмір блоку від 100000 байтів до 900000 байтів (типово), відповідно. Під час розпаковування розмір блоку, використаний для стикання, буде прочитано із заголовка стиснутого файла, а bunzip2 потім отримує саме стільки оперативної пам'яті, скільки потрібно для розпаковування файла. Оскільки розміри блоків зберігаються у стиснутих файлах, прапорці від -1 до -9 є непотрібними при розпаковуванні, а тому їх буде проігноровано.

Вимоги щодо стискання і розпакування, у байтах, мають такі оцінки:

       Стискання: 400 кБ + ( 8 x розмір блоку )

       Розпакування: 100 кБ + ( 4 x розмір блоку ) або
                      100 кБ + ( 2,5 x розмір блоку )

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

Для файлів, які стиснуто з типовим розміром блоку 900 кБ, bunzip2 потребуватиме близько 3700 кілобайтів для розпаковування. Для розпаковування будь-якого файла на комп'ютері з 4 мегабайтами оперативної пам'яті у bunzip2 передбачено параметр для розпаковування за допомогою приблизно половини цього об'єму пам'яті, близько 2300 кілобайтів. Швидкість розпаковування також зменшиться удвічі, тому вам слід користуватися цим параметром лише там, де у цьому є потреба. Відповідним прапорцем є -s.

Загалом, спробуйте скористатися найбільшим за обмеженням розміром блоку у пам'яті, оскільки це робить максимальним стискання. Розмір блоку майже не впливає на швидкість стискання або розпаковування.

Інше важливе зауваження стосується файлів, які вкладаються у один блок — тобто більшості файлів, з якими ви можете мати справу, коли користуєтеся великим розміром блоку. Справжній об'єм пам'яті є пропорційним до розміру файла, оскільки розмір файла є меншим за розмір блоку. Наприклад, стискання файла у 20000 байтів із прапорцем -9 призведе до отримання засобом стискання близько 7600 кБ оперативної пам'яті, але використано буде лише 400 кБ + 20000 * 8 = 560 кілобайтів з цієї пам'яті. Так само, засіб розпаковування отримає 3700 кБ оперативної пам'яті, але використає лише 100 кБ + 20000 * 4 = 180 кілобайтів.

Нижче наведено таблицю із резюме щодо максимального використання пам'яті для різних розмірів блоків. Також записано загальний стиснений розмір для 14 файлів з набору для стискання тексту Калгарі, загальний об'єм даних у яких складає 3141622 байти. Цей стовпчик дає емпіричні дані щодо того, як залежить стискання від розміру блоку. Наведені дані дещо занижують переваги використання більшого розміру блоку для великих файлів, оскільки у використаному наборі переважно малі файли.

           Використано Використано Використано Розмір Прапорець стискання розпак. розпак. -s набору

     -1 1200 кБ 500 кБ 350 кБ 914704
     -2 2000 кБ 900 кБ 600 кБ 877703
     -3 2800 кБ 1300 кБ 850 кБ 860338
     -4 3600 кБ 1700 кБ 1100 кБ 846899
     -5 4400 кБ 2100 кБ 1350 кБ 845160
     -6 5200 кБ 2500 кБ 1600 кБ 838626
     -7 6100 кБ 2900 кБ 1850 кБ 834096
     -8 6800 кБ 3300 кБ 2100 кБ 828642
     -9 7600 кБ 3700 кБ 2350 кБ 828642

ВІДНОВЛЕННЯ ДАНИХ З ПОШКОДЖЕНИХ ФАЙЛІВ
bzip2 стискає файли блоками, розмір яких, зазвичай, дорівнює 900 кілобайтів. Обробка кожного блоку відбувається незалежно. Якщо помилка під час зберігання на носії даних або передавання даних спричиняє пошкодження даних у багатоблоковому файлі .bz2, дані з непошкоджених блоків файла можна відновити.

Стиснене представлення кожного з блоків обмежено 48-бітовим взірцем, який уможливлює пошук меж блоків з прийнятною точністю. Також у кожному з блоків зберігається його власна 32-бітова контрольна сума CRC, тому пошкоджені блоки можна відрізнити від непошкоджених.

bzip2recover — проста програма, призначенням якої є пошук блоків у файлах .bz2 і запис кожного з блоків до власного файла .bz2. Ви можете скористатися bzip2 -t для перевірки цілісності отриманих файлів та розпакування тих з них, які не пошкоджено.

bzip2recover приймає єдиний аргумент, назву пошкодженого файла, і записує послідовність файлів «rec00001file.bz2», «rec00002file.bz2» тощо, у яких містяться видобуті блоки. Назви файлів-результатів створено таким чином, щоб можна було скористатися шаблонами заміни для подальшої обробки — наприклад, «bzip2 -dc rec*file.bz2 > відновлені_дані» — обробить файли у належній послідовності.

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

НОТАТКИ ЩОДО ШВИДКОДІЇ
При стисканні під час фази упорядковування програма збирає разом подібні рядки у файлі. Через це, стискання файлів, які містять дуже довгі послідовності повторюваних символів, наприклад «aabaabaabaab ...» (з повтором декілька сотень разів) може бути повільнішим за стискання звичайних файлів. У таких випадках версія 0.9.5 і новіші працюють набагато краще за своїх попередників. Співвідношенням для часу стискання у найгіршому та середньому випадках складає 10:1. У попередніх версіях воно могло складати щось близько 100:1. Для спостереження за усіма подробицями поступу стискання можна скористатися, якщо ви цього хочете, параметром -vvvv.

Швидкості розпакування це не стосується.

Зазвичай, bzip2 отримує декілька мегабайтів оперативної пам'яті для роботи, а потім заповнює їх доволі випадковим чином. Це означає, що швидкодія, при стисканні та розпаковуванні, значним чином визначається швидкістю, з якою комп'ютер може обслуговувати промахи у кеші. Через це, незначні зміни у коді для зменшення частоти промахів дають непропорційно велике підвищення швидкодії. Автор вважає, що bzip2 найкраще працює на комп'ютерах із дуже великим кешем.

ЗАСТЕРЕЖЕННЯ
Повідомлення щодо помилок введення-виведення не такі корисні, як могли б бути. bzip2 намагається з усіх сил виявити помилки введення-виведення і завершити роботу у штатному режимі, але подробиці щодо того, з чим виникли проблеми, іноді є доволі оманливими.

Ця сторінка підручника містить відомості щодо версії 1.0.8 bzip2. Стиснені дані, які створено за допомогою цієї версії, є в обох напрямках сумісними із попередніми загальнодоступними випусками, версіями 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 та новішими, за таким винятком: версія 0.9.0 і новіші здатні правильно розпаковувати декілька поєднаних стиснених файлів. Версія 0.1pl2 не здатна це робити; вона зупиниться після розпакування лише першого файла у потоці даних.

У версіях bzip2recover до 1.0.2 для представлення бітових позицій у стиснутих файлах використано 32-бітові цілі числа, тому ці версії не можуть працювати із стисненими файлами, об'єм яких перевищує 512 мегабайтів. У версіях 1.0.2 і новіших використано 64-бітові цілі числа на деяких платформах, де передбачено підтримку таких чисел (підтримувані платформи GNU та Windows). Щоб визначити, чи було bzip2recover зібрано з таким обмеженням, запустіть програму без аргументів. Щоб там не сталося, ви можете зібрати версію без обмежень власноруч, якщо ви можете повторно зібрати програму із встановленим для MaybeUInt64 значенням 64-бітового цілого числа без знаку.

АВТОР
Julian Seward, jseward@acm.org.

https://sourceware.org/bzip2/

Ідеї, які покладено в основу bzip2, належать (принаймні) таким людям: Майклу Берроузу (Michael Burrows) та Девіду Вілеру (David Wheeler) (перетворення з упорядковуванням блоків), Девіду Вілеру (знову, кодувальник Гаффмана), Пітеру Фенвіку (Peter Fenwick) (модель структурованого кодування у початковій версії bzip та багато удосконалень) та Алістеру Моффату (Alistair Moffat), Редфорду Нілу (Radford Neal) і Яну Віттену (арифметичний кодувальник у початковій версії bzip). Я дуже вдячний їм за допомогу, підтримку та поради. Посилання на джерела документації можна знайти у підручнику у дистрибутиві із початковим кодом програми. Крістіан фон Рокес (Christian von Roques) заохотив мене до пошуку швидших алгоритмів упорядковування для пришвидшення стискання. Бела Любкін (Bela Lubkin) заохотив мене до удосконалення швидкодії стискання у найгіршому випадку. Донна Робінсон (Donna Robinson) виконала перетворення документації на код XML. Скрипти bz* походять зі скриптів GNU gzip. Багато людей надсилало латки, допомагало із проблемами з портуванням, надавало обчислювальні потужності, надсилало поради та допомагало у інший спосіб.

ПЕРЕКЛАД
Український переклад цієї сторінки посібника виконано 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.