Як заархівувати або розпакувати файли з терміналу Linux

ZIP-архіви є дуже популярним форматом для стиснення даних, який широко використовується у різних операційних системах, включаючи Windows, macOS та Linux. За допомогою терміналу Linux можна легко створювати ZIP-архіви або розпаковувати файли з вже існуючих.

Стислий формат ZIP-архіву

Формат ZIP здобув широке поширення, особливо у середовищі Windows, що зробило його, можливо, найпоширенішим типом стиснених архівів у світі.

Хоча в Linux часто зустрічаються файли .tar.gz та .tar.bz2, користувачі Windows, ймовірно, надсилатимуть вам архіви саме у форматі ZIP. Таким чином, якщо вам потрібно архівувати файли для відправлення користувачеві Windows, формат ZIP є найбільш універсальним та сумісним варіантом.

Утиліти zip, unzip та їхні можливості

Системи Linux та Unix, включаючи macOS, мають вбудовані інструменти для роботи з ZIP-архівами: zip для створення та unzip для розпакування. Крім цих основних утиліт, існує ціла низка додаткових, таких як zipcloak, zipdetails, zipsplit та zipinfo.

Ми перевірили деякі популярні дистрибутиви Linux, щоб з’ясувати, чи включені ці утиліти до стандартної установки. У Ubuntu 19.04, 18.10 та 18.04 усі утиліти були присутні. Також вони були встановлені за замовчуванням у Manjaro 18.04. Fedora 29 та CentOS мали лише zip і unzip.

Для встановлення відсутніх утиліт у Fedora 29, використайте таку команду:

sudo dnf install perl-IO-Compress

Для встановлення утиліт у CentOS 7, використайте цю команду:

sudo yum install perl-IO-Compress

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

Створення ZIP-файлів за допомогою команди zip

Щоб створити ZIP-архів, потрібно вказати ім’я архівного файлу та файли, які ви хочете включити. Розширення “.zip” не обов’язкове, але його можна додати.

Наприклад, щоб створити файл source_code.zip, який містить всі файли вихідного коду C та заголовкові файли з поточного каталогу, введіть команду:

zip source_code *.c *.h

Під час додавання файлів їхні назви та рівень стиснення відображаються в терміналі.

При перевірці створеного ZIP-архіву, ви побачите, що розширення “.zip” було додано автоматично.

ls -l source_code.zip

Якщо ви не бажаєте бачити вивід команди zip, використовуйте опцію -q (тихий режим).

zip -q source_code *.c *.h

Включення каталогів до ZIP-архіву

Щоб додати підкаталоги до ZIP-архіву, використовуйте опцію -r (рекурсивний) та вкажіть ім’я каталогу. Наприклад, щоб створити ZIP-архів, включаючи підкаталог archive, виконайте команду:

zip -r -q source_code archive/ *.c *.h

Для зручності користувачів, що розпаковуватимуть ваш ZIP-архів, часто корисно створювати архів з файлами, що знаходяться всередині каталогу. Таким чином, файли після розпакування не будуть розкидані по комп’ютеру, а будуть знаходитись в окремій папці.

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

zip -r -q source_code work/

Налаштування рівня стиснення

Ви можете налаштувати рівень стиснення при створенні ZIP-архіву. Діапазон рівнів від 0 до 9, де 0 – це відсутність стиснення, а 9 – максимальний рівень. Чим вищий рівень стиснення, тим більше часу потрібно на створення архіву. Для невеликих архівів різниця у часі незначна. Стиснення за замовчуванням (рівень 6) зазвичай достатнє.

Щоб примусово задати рівень стиснення, використовуйте опцію - з числом, наприклад:

zip -0 -r -q source_code work/

Рівень стиснення за замовчуванням – 6. Вказувати -6 не обов’язково, але це не зашкодить.

zip -r -q source_code work/

Максимальний рівень стиснення – 9.

zip -9 -r -q source_code work/

На прикладі вибраних файлів, різниця між відсутністю стиснення (рівень 0) і стисненням за замовчуванням (рівень 6) становить 400 КБ. Різниця між стисненням за замовчуванням і найвищим рівнем (рівень 9) – всього 4К.

Це може здаватися незначним, але для архівів, що містять сотні або навіть тисячі файлів, навіть невелике додаткове стиснення на файл може дати значну економію місця.

Захист ZIP-архівів паролем

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

zip -e -r -q source_code work/

Розпакування ZIP-архівів за допомогою команди unzip

Для вилучення файлів з ZIP-архіву використовуйте команду unzip, вказавши ім’я ZIP-файлу. Не забудьте про розширення “.zip”.

unzip source_code.zip

Після розпакування файлів їхні імена будуть виведені в терміналі.

ZIP-файли не зберігають інформації про власників файлів. Всі файли, які розпаковуються, стають власністю користувача, який їх розпаковує.

Аналогічно до zip, команда unzip має опцію -q (тихий режим), щоб не виводити список файлів під час розпакування.

unzip -q source_code.zip

Розпакування файлів в певний каталог

Для розпакування файлів в конкретний каталог, використовуйте опцію -d (каталог) та вкажіть шлях до цільового каталогу.

unzip -q source_code.zip -d ./development

Розпакування захищених паролем ZIP-архівів

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

unzip -q source_code.zip

Якщо ви не проти, що пароль може бути видимим, ви можете передати його через командний рядок за допомогою опції -P (пароль). (Зверніть увагу на велику літеру “P”).

unzip -P fifty.treacle.cutlass -q source_code.zip

Виключення файлів при розпакуванні

Якщо ви не бажаєте розпаковувати певні файли, скористайтеся опцією -x (виключити). В даному прикладі ми розпакуємо всі файли, окрім тих, що мають розширення “.h”.

unzip -q source_code.zip -x *.h

Перезапис файлів

Припустимо, ви розпакували архів, але випадково видалили деякі файли. Якщо спробувати розпакувати архів знову у той самий каталог, unzip запропонує вам прийняти рішення щодо перезапису файлів. Він очікує однієї з наступних відповідей:

Крім відповіді r (перейменування), ці відповіді чутливі до регістру.

y: Так, перезаписати цей файл.
n: Ні, не перезаписувати цей файл.
A: Усі, перезаписати всі файли.
N: Немає, не перезаписувати жоден із файлів.
r: Перейменувати, розпакувати цей файл, але дати йому нове ім’я. Вам буде запропоновано ввести нове ім’я.

Щоб примусово перезаписати файли, використовуйте опцію -o (перезаписати).

unzip -o -q source_code.zip

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

unzip -n source_code.zip

Перегляд вмісту ZIP-архіву

Часто корисно переглянути список файлів в ZIP-архіві, перш ніж їх розпаковувати. Це можна зробити за допомогою опції -l (архів списку). Вивід команди перенаправляється у less, щоб його було зручніше переглядати.

unzip -l source_code.zip | less

Вивід показує каталоги та файли в ZIP-архіві, їх розмір, а також час та дату додавання до архіву. Натисніть q, щоб вийти з less.

Існують інші способи перегляду вмісту ZIP-архіву, які надають різну інформацію.

Додавання паролю за допомогою команди zipcloak

Якщо ви створили ZIP-архів, але забули додати пароль, можна швидко виправити це за допомогою команди zipcloak. Передайте ім’я ZIP-архіву командному рядку, і вам буде запропоновано ввести пароль та підтвердити його.

zipcloak source_code.zip

Перегляд деталей файлу за допомогою команди zipdetails

Команда zipdetails надає детальну інформацію про ZIP-архів. Для зручного перегляду вивід команди перенаправляється до less.

zipdetails source_code.zip | less

Зверніть увагу, що інформація включає імена файлів, навіть якщо ZIP-архів захищено паролем. Ці дані зберігаються у файлі ZIP як метадані і не шифруються.

Пошук у файлі за допомогою команди zipgrep

Команда zipgrep дозволяє шукати файли у ZIP-архіві. У наступному прикладі ми шукаємо файли, що містять текст “keyval.h”.

zipgrep keyval.h source_code.zip

З виводу видно, що файли sleng.c та getval.c містять рядок “keyval.h”. Також, є дві копії кожного файлу в різних каталогах ZIP-архіву.

Перегляд інформації за допомогою команди zipinfo

Команда zipinfo надає ще один спосіб перегляду вмісту ZIP-архіву. Як і раніше, вивід команди перенаправляється до less.

zipinfo source_code.zip | less

Зліва направо у виводі показано:

  • Права доступу до файлу
  • Версія інструменту, що використовувався для створення ZIP-архіву
  • Оригінальний розмір файлу
  • Дескриптор файлу (описаний нижче)
  • Метод стиснення (deflation, у цьому випадку)
  • Дата та час
  • Ім’я файлу та каталог

Дескриптор файлу складається з двох символів. Перший символ – t або b, що позначає текстовий або двійковий файл. Якщо це велика літера, файл зашифровано. Другий символ може бути одним із чотирьох. Він показує тип метаданих, включених до файлу: відсутні, розширений локальний заголовок, додаткове поле або обидва.

-: Якщо жодного немає, символ буде дефісом.
l: Якщо є розширений локальний заголовок, але немає додаткового поля.
x: Якщо немає розширеного локального заголовка, але є додаткове поле.
X: Якщо є і розширений локальний заголовок, і додаткове поле.

Розділення файлів за допомогою команди zipsplit

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

Опція -n (розмір) дозволяє вказати максимальний розмір для кожного нового ZIP-архіву. У наступному прикладі файл source_code.zip розбивається на частини, не більші за 100 КБ (102400 байт).

zipsplit -n 102400 source_code.zip

Обраний розмір не повинен бути меншим за розмір будь-якого файлу у ZIP-архіві.

Використовуючи ці команди, ви можете створювати, розпаковувати та виконувати різні інші операції з ZIP-архівами, не виходячи з терміналу Linux.