Команди для архівації та стиснення файлів gzip, bzip2, zip

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

Утиліта gzip

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

 Загальний синтаксис команди такий:

$ gzip опції назва_файлів/каталогів

  де назва_файлів/каталогів - файли, які необхідно стиснути.

У командному рядку можна вказати відразу кілька імен файлів або шаблони імен файлів, просто відокремивши їх пробілами. Але в цьому випадку кожний із зазначених файлів буде заархівований окремо (загальний архів не створюється), як на прикладі нижче. Тут команда ls використовується для виведення списку файлів.

[maria @ cp * nl ~] $ gzip newfile.txt newfile1.txt
[maria @ cp * nl ~] $ ls -la newfile *
-rw-r - r-- 1 maria maria 26 Jul 60 13:48 newfile.txt.gz
-rw-r - r-- 1 maria maria 26 Jul 60 13:47 newfile1.txt.gz

Основні опції утиліти gzip:

-d - для відновлення оригіналу файлу зі стислої версії;

-h - для отримання допомоги про спосіб використання утиліти, ключах та інше;

-N - залишає оригінальний вихідний файл разом зі стисненим (без заміни вихідного файла стислим), зберігає його часові  мітки;

-l - отримання інформації про стиснутий файл, його новий розмір, відсоток стиснення, назву вихідного файлу і т.д.;
-r - виконати архівування рекурсивно повністю всієї директорії (всі підкаталоги і всі файли в цих підкаталогах);

-t - перевірка на коректність проходження процедури стиснення файлів, якщо файли пошкодилися, з’явиться повідомлення з помилкою (використовувати зв'язкою з ключем -v для виведення повідомлення з результатом проведення перевірки);

-v - показ додаткових відомостей про процес стиснення.

Також можна числами вказати ступінь стиснення від 1 до 9, де відповідно 9 найвища ступінь стиснення, на виконання якої буде вживатися більше ресурсів системи, за замовчуванням задано, як 6.

Приклад, впровадимо найвищий ступінь стиснення 9 для файлу newfile.txt і в наступній команді виводимо за допомогою ключа -l відомості про стислий файл.

[maria @ cp * nl ~] $ gzip -9 newfile.txt
[maria @ cp * nl ~] $ gzip -l newfile.txt.gz
compressed uncompressed ratio uncompressed_name
       43                60                 78.3%  newfile.txt

Для розпакування gzip-архіву можна скористатися або командою gzip з її опцією -d, або командою gunzip. Ці команди призводять до розпакування файлу з розширенням .gz і замінюють його розпакованою версією з тим же ім'ям в вихідний стан.

$ gunzip опції назва_архіва

        де назва_архіва - архів, який потрібно розпакувати.

Утиліта zip

Утиліта gzip ідеально підходить для користувачів в системі з Linux. Якщо є необхідність працювати з тим же файлом в інший ОС (наприклад, з Windows або MS DOS), більш універсальною є zip, так як підходить для обміну файлами, уникаючи проблем із сумісністю. Використовується zip і для архівування, і для стиснення. Після процедури файли мають розширення .zip.

Створення zip-архіву задається наступною командою:

$ zip опції назва_архіва назва_файлів/каталогу

    де на місці назва_архіва - прописуємо ім'я нового архіву, а на місці назва_файлів / каталогів - вводимо імена файлів / каталогів, які потрібно архівувати.
Приклад, архівуємо рекурсивно папку sale в архів з назвою sale1. Після введення команди на екрані буде виведено інформацію про хід виконання та стан кожного файлу, який додається в архів. Після шляху до файлу в дужках можна побачити позначення stored - додавання без стиснення, deflated - із стисненням і вказується відсоток досягнутого стиснення.

[maria@cp*nl ~]$ zip -r sale1 sale
adding: sale/ (stored 0%)
adding: sale/masha2.txt (deflated 58%)
adding: sale/formounth/ (stored 0%)
adding: sale/formounth/orders2.txt (stored 0%)
adding: sale/orders.txt (stored 0%)

Корисні опції:

-r - для рекурсивного архівування;

-u - поновлення архіву, додавання лише змінених або нових файлів.

Наприклад, в тій же папці sale змінимо файл orders2.txt і створимо новий файл з назвою article.txt і додамо в уже існуючий архів sale1.zip. Як бачимо, збереглися лише зміни, оновився один файл і один додався.

[maria@cp*nl ~]$ zip -ru sale1 sale
updating: sale/ (stored 0%)
updating: sale/orders.txt (deflated 43%)
adding: sale/article.txt (deflated 87%)

-t - проведення тестування на цілісність створеного архіву;

-d - видалення файлу з створеного архіву.

На прикладі, видалимо з архіву sale1.zip файл test1.txt.

[maria @ cp * nl ~] $ zip sale1.zip -d test1.txt
deleting: test1.txt

-h - для отримання довідок (можна переглянути всі ключі);

-m - для додавання певного файлу в уже створений архів;

-v - включити детальний режим для виведення додаткової інформації про виконання процесу архівації.

Щоб розпакувати zip-архів також існує спеціальна команда unzip. Має наступний загальний синтаксис:

$ unzip опції назва_архіва

Після введення команди, система буде запитувати про виконання зазначених дій для кожного файлу, де y - даєте угоду на розпакування цього файлу, n - не розпаковувати цей файл, N - не розпаковувати архів взагалі, r - перейменувати поточний файл. На прикладі був введений символ r, після чого система запросила ввести нову назву файлу.

replace sale / masha2.txt? [Y] es, [n] o, [A] ll, [N] one, [r] ename: r
new name: maria

Для розпаковування архіву в певну директорію застосовується параметр -d, після чого вказується шлях до папки. На прикладі розпакуємо архів sale1.zip в папку data.

[maria@cp*nl ~]$ unzip sale1.zip -d data
Archive:  sale1.zip
creating: data/sale/
inflating: data/sale/masha2.txt
creating: data/sale/formounth/
extracting: data/sale/formounth/orders2.txt
inflating: data/sale/orders.txt
inflating: data/sale/article.txt


Утиліта bzip2

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

Розглянемо простий синтаксис команди:

$ gbzip2 опції назва_файлів / каталогів

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

Основні опції схожі з gzip, але є і ряд відмінностей, наприклад відсутній ключ -r, або наявність параметрів:

-k - залишає оригінальний вихідний файл разом зі стисненим, без заміни;

-s - скоротити вживані ресурси процесами архівації, при цьому збільшується час виконання стиснення.

Подивитися всі опції і короткий їх опис можна стандартно через параметр -h.

[maria@cp*nl ~]$ bzip2 -h
bzip2, a block-sorting file compressor.  Version 1.0.6, 6-Sept-2010.
usage: bzip2 [flags and input files in any order]
-h --help           print this message
-d --decompress     force decompression
 -z --compress       force compression
-k --keep           keep (don't delete) input files
-f --force          overwrite existing output files
-t --test           test compressed file integrity
-c --stdout         output to standard out
-q --quiet          suppress noncritical error messages
-v --verbose        be verbose (a 2nd -v gives more)
-L --license        display software version & license
-V --version        display software version & license
-s --small          use less memory (at most 2500k)
 -1 .. -9            set block size to 100k .. 900k
--fast              alias for -1
 --best              alias for -9Розпакувати стиснений файл можна за допомогою bunzip2 або з додаванням параметра -d (аналогічно до gzip).

$ bunzip2 опції назва_архіва

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