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.