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

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

Формат стисненого архівного файлу ZIP

Завдяки домінуванню формату ZIP у сфері Windows, ZIP-файли, ймовірно, є найпоширенішою формою стисненого архіву в світі.

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

zip, unzip та інші утиліти

Можливо, ви вже знаєте, що операційні системи Linux і Unix, такі як macOS, мають інструменти, які дозволяють створювати ZIP-файли та витягувати з них файли, які називаються zip та unzip. Але існує ціла сім’я пов’язаних утиліт, таких як zipcloak, zipdetails, zipsplit і zipinfo.

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

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

sudo dnf install perl-IO-Compress

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

sudo yum install perl-IO-Compress

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

Як створити ZIP-файл за допомогою команди zip

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

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

zip source_code *.c *.h

Кожен файл відображається в списку, коли він додається. Відображається назва файлу та ступінь стиснення, яке було досягнуто для цього файлу.

  Як додати каталог до вашого $PATH в Linux

Якщо ви подивитеся на новий архів ZIP, ви побачите, що розширення файлу «.zip» було додано автоматично за допомогою zip.

ls -l source_code.zip

Якщо ви не хочете бачити вихідні дані з zip під час створення ZIP-файлу, використовуйте параметр -q (тихий).

zip -q source_code *.c *.h

Включаючи каталоги в ZIP-файли

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

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

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

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

zip -r -q source_code work/

Встановлення рівня стиснення

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

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

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) становить лише 4K.

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

Додавання паролів до ZIP-файлів

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

zip -e -r -q source_code work/

Як розпакувати ZIP-файл за допомогою команди unzip

Щоб витягти файли з файлу ZIP, скористайтеся командою unzip і вкажіть ім’я ZIP-файлу. Зауважте, що вам потрібно надати розширення «.zip».

unzip source_code.zip

Коли файли розпаковані, вони відображаються у вікні терміналу.

  Як використовувати Tidal Music з командного рядка в Linux

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 (пароль). (Ви повинні використовувати велику «П».)

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

Без урахування файлів

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

unzip -q source_code.zip -x *.h

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

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

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

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

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

Щоб примусово розпакувати, щоб перезаписати будь-які існуючі файли, використовуйте параметр -o (перезапис).

unzip -o -q source_code.zip

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

unzip -n source_code.zip

Заглядаючи в ZIP-файл

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

unzip -l source_code.zip | less

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

  Як налаштувати віртуальні машини на Linux за допомогою Gnome Boxes

Як ми побачимо, існують інші способи зазирнути усередину файлу ZIP, які дають різні типи інформації.

Додайте пароль за допомогою команди zipcloak

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

zipcloak source_code.zip

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

Команда zipdetails покаже вам багато інформації щодо ZIP-файлу. Єдиний розумний спосіб обробити обсяг виводу, який може дати ця команда, – це передати його менше.

zipdetails source_code.zip | less

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

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

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

zipgrep keyval.h source_code.zip

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

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

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

zipinfo source_code.zip | less

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

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

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

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

Розділіть файл за допомогою команди zipsplit

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

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

zipsplit -n 102400 source_code.zip

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

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