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,
[email protected].
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
<
[email protected]> і Yuri Chornoivan <
[email protected]>
Цей
переклад є
безкоштовною
документацією;
будь ласка,
ознайомтеся
з умовами
GNU
General Public License Version 3 НЕ
НАДАЄТЬСЯ
ЖОДНИХ
ГАРАНТІЙ.
Якщо ви
знайшли
помилки у
перекладі
цієї
сторінки
підручника,
будь ласка,
надішліть
електронний
лист до
списку
листування
перекладачів:
[email protected]