Є два чіткі, але пов'язані між собою завдання. Упаковка дерева файлів (включаючи імена файлів, структуру каталогів, дозволи файлової системи, право власності та будь-які інші метадані) у потік байтів називається
архівуванням . Видалення надмірності в потоці байтів для отримання меншого байтового потоку називається стисненням .
У Unix дві операції розділені, з окремими інструментами для кожної. На більшості інших платформ (поточні та історичні) комбіновані інструменти виконують як архівування, так і стиснення.
(gzip та інші програми, що імітують інтерфейс gzip, часто мають можливість зберігати оригінальне ім'я файлу у стисненому виході, але це, поряд з CRC або іншою перевіркою для виявлення корупції, є єдиними метаданими, які вони можуть зберігати.)
Існують переваги відділення стиснення від архівування. Архівне забезпечення залежить від платформи (метадані файлової системи, що потребують збереження, варіюються в широких межах), але реалізація є простою, значною мірою пов'язаною з введенням-виведенням і мало змінюється з часом. Стиснення не залежить від платформи, але реалізація пов'язана з процесором, і алгоритми постійно вдосконалюються, щоб скористатися збільшенням ресурсів, які сучасне обладнання може принести для вирішення проблеми.
Найпопулярніший архіватор Unix є tar
, хоча існують і інші, такі як cpio
і ar
. (Пакети Debian - це ar
архіви, в той час
cpio
як вони часто використовуються для вроджених ramdisks.) tar
Є або часто поєднується з інструментами стиснення, такими як compress
(.Z), gzip
(.gz),
bzip2
(.bz2) та xz
(.xz), від найдавніших до наймолодших , і не випадково від найгіршого до найкращого стиснення.
Створення tar
архіву та стиснення його - це різні кроки: компресор нічого не знає про tar
формат файлу. Це означає, що для вилучення одного файлу із стислого tar
архіву потрібно розпакувати всі попередні файли. Це часто називають «суцільним» архівом.
Так само, оскільки tar - це "потоковий" формат - необхідний для того, щоб він був корисним у конвеєрі - в архіві смоли немає глобального індексу, а перерахування вмісту архіву смоли так само дорого, як і його вилучення.
На відміну від цього, Zip та RAR та 7-zip (найпопулярніші архіватори на сучасних платформах Windows) зазвичай стискають кожен файл окремо, а метадані стискають легко, якщо взагалі. Це дозволяє дешево перераховувати файли в архіві та витягувати окремі файли, але означає, що надмірність між кількома файлами в одному архіві не може бути використана для збільшення стиснення. Хоча в загальному випадку стиснення вже стисненого файлу не зменшує розмір файлу додатково, іноді ви можете побачити zip-файл в межах zip-файлу: перший застібку перетворив безліч малих файлів в один великий файл (можливо, з вимкненням стиснення), а другий потім блискавка стискається як єдине ціле.
Між різними платформами та філософіями існує перехресне запилення: gzip
по суті zip
це компресор без архіватора, а xz
по суті 7-zip
є компресор без архіватора.
Є й інші, спеціалізовані компресори. Варіанти PPM та їх наступник ZPAQ
оптимізовані для максимального стиснення без огляду на споживання ресурсів. Вони можуть легко пережовувати стільки процесора та оперативної пам’яті, скільки ви можете кинути на них, а декомпресія - це так само оподаткування, як і стиснення (на противагу цьому, найбільш широко використовувані засоби стиснення
асиметричні : декомпресія дешевша, ніж стискання).
На іншому кінці спектру, lzo
, snappy
і LZ4
є «легкими» компресорами для максимальної швидкості і мінімального споживання ресурсів, при вартості стиснення. Вони широко використовуються у файлових системах та інших сховищах об'єктів, але рідше як окремі інструменти.
Отже, що слід вибрати?
Архівування:
Оскільки ви перебуваєте на Ubuntu, немає жодної реальної причини використовувати інше, ніж tar
для архівації, якщо тільки ви не намагаєтеся зробити файли, які легко читаються в іншому місці.
zip
важко перемогти за всюдисущість, але це не орієнтоване на Unix і не буде зберігати дозволи вашої файлової системи та інформацію про право власності, а її стиснення, що запускається, застаріло. 7-zip та RAR (і ZPAQ) мають більш сучасну компресію, але однаково не підходять для архівації файлових систем Unix (хоча нічого не заважає використовувати їх як компресори); RAR також є власником.
Стиснення:
Для максимальної компресії ви можете ознайомитись з еталоном, таким як величезний на http://mattmahoney.net/dc/text.html . Це повинно дати вам краще уявлення про компроміси.
Ви, мабуть, не хочете максимальної компресії, хоча. Це занадто дорого.
xz
є найпопулярнішим інструментом стиснення загального призначення в сучасних системах Unix. Я вважаю, що 7-zip також може читати файли xz, оскільки вони тісно пов'язані.
Нарешті: якщо ви архівуєте дані для чогось іншого, крім короткочасного зберігання, вам слід вибрати щось із відкритим кодом та бажано широко розповсюджене, щоб згодом мінімізувати головні болі.