Перейти к основному контенту

Архивы в Linux

Актуально для: Linux (любой дистрибутив)
Цель: научиться эффективно упаковывать и распаковывать файлы через командную строку, понимать различия форматов и использовать правильные параметры.

Зачем нужны архивы и что они делают

Архивы решают несколько ключевых задач:

  • Экономия дискового пространства – сжатие уменьшает размер файлов (особенно текстов, логов, кода).
  • Объединение множества файлов – удобно передавать одну папку как один файл (например, сайт целиком).
  • Скорость передачи – меньше размер = быстрее загрузить/скачать.
  • Бэкапы и логи – архивы позволяют хранить историю с минимальным местом.
  • Совместимость – разные форматы поддерживаются на всех ОС (Windows, macOS, Linux).

Сравнение zip, tar и 7z

Характеристика zip tar 7z
Степень сжатия средняя зависит от компрессора (gzip – низкая, xz – высокая) очень высокая (LZMA2)
Скорость сжатия высокая средняя/высокая (gzip быстрее xz) низкая
Объединение файлов да, сразу в один .zip tar только объединяет, сжатие отдельно да
Метаданные Linux не сохраняет права, владельца сохраняет (права, симлинки, временные метки) сохраняет
Кроссплатформенность отличная (встроен везде) отличная (tar + gzip/xz есть везде) хорошая (нужен p7zip)
Многотомность нет нет да (разбивка на части)
Шифрование да (пароль, слабое) нет (только внешним gpg) да (AES-256)

Когда что выбрать?

  • zip – для быстрого обмена с пользователями Windows, простых задач.
  • tar.gz / tar.xz – для бэкапов и переноса файлов между Linux-системами (сохраняются права доступа).
  • 7z – для максимального сжатия (бекапы больших данных, дистрибутивы) или для шифрования.

Распаковка ранее скачанного архива

Все примеры выполняются в терминале. Предполагаем, что архив уже лежит в текущей папке.

Общий принцип – распаковка в указанную папку

Очень часто нужно распаковать архив не в текущую директорию, а в отдельную папку (например, ~/my_project). Для каждого формата синтаксис немного отличается:

Формат Команда для распаковки в папку /path/to/dir Создаёт ли папку автоматически?
.zip unzip archive.zip -d /path/to/dir да (если нет – создаст)
.tar.* tar -xf archive.tar.gz -C /path/to/dir нет (папка должна существовать)
.7z 7z x archive.7z -o/path/to/dir да (если нет – создаст)

Важно для tar: предварительно создайте целевую папку:

mkdir -p /path/to/dir
tar -xf archive.tar.gz -C /path/to/dir

Подробная распаковка по форматам

Распаковка .zip

Просто распаковать в текущую папку

unzip myarchive.zip

Распаковать в указанную папку (создаст её, если нет)

unzip myarchive.zip -d /home/user/extracted_data

Просмотреть содержимое без распаковки

unzip -l myarchive.zip

Распаковать без запроса перезаписи (перезаписать всё)

unzip -o myarchive.zip
Распаковка .tar, .tar.gz, .tar.bz2, .tar.xz

Команда tar автоматически определяет компрессию по расширению или по флагам.

Распаковать tar (без сжатия) или tar.gz / tar.xz

tar -xf archive.tar
tar -xf archive.tar.gz
tar -xf archive.tar.bz2
tar -xf archive.tar.xz

Распаковать в определённую папку (она должна существовать)

mkdir -p /target/folder
tar -xf archive.tar.gz -C /target/folder

Подробный вывод (что распаковывается)

tar -xvf archive.tar.gz

Распаковать только конкретные файлы/папки

tar -xf archive.tar.gz --wildcards '*.txt' 'docs/*'
Распаковка .7z

Для работы с 7z в Linux нужно установить пакет p7zip-full (или p7zip):

sudo apt install p7zip-full          # Debian/Ubuntu
sudo dnf install p7zip               # Fedora

Полная распаковка с восстановлением структуры папок

7z x myarchive.7z

Распаковка в указанную папку (без пробела после -o)

7z x myarchive.7z -o/home/user/newfolder

Распаковать всё в текущую папку без создания подпапок (плоская структура)

7z e myarchive.7z

Просмотр содержимого

7z l myarchive.7z

Упаковка файлов и папок в архив

Базовые команды для создания архивов

Задача Команда
Упаковать папку mydata в zip zip -r mydata.zip mydata
Упаковать несколько файлов/папок в tar.gz tar -czf backup.tar.gz file1.txt file2.txt folder1/ folder2/
Упаковать папку mydata в 7z 7z a mydata.7z mydata

Методы компрессии и их параметры

Для zip

Используется алгоритм Deflate (стандарт) или Store (без сжатия).
Уровень сжатия от 0 (без сжатия) до 9 (максимальное, медленнее).

Основные параметры zip:

Параметр Значение
-r рекурсивно обходить папки (обязателен для каталогов)
-q тихий режим (не выводить имена файлов)
-0 … -9 уровень сжатия (0 = store, 9 = ultra)
-e зашифровать архив (пароль запросит интерактивно)
-m удалить исходные файлы после упаковки
-x исключить файлы/папки (например, -x "*.log")

Создать zip из папки с максимальным сжатием

zip -9r archive.zip myfolder/

Добавить новые файлы в существующий zip

zip -g archive.zip newfile.txt

Зашифрованный zip с паролем

zip -e -r secret.zip confidential/
Для tar с дополнительными компрессорами

tar сам не сжимает, а только объединяет файлы в один поток. Для сжатия используются внешние программы:

Флаг tar Компрессор Расширение Степень сжатия Скорость
-z gzip .tar.gz низкая высокая
-j bzip2 .tar.bz2 средняя средняя
-J xz .tar.xz высокая низкая
--zstd Zstandard .tar.zst средняя / настраиваемая очень высокая

Общие параметры tar:

Параметр Значение
-c создать архив (create)
-f файл архива (file) – следующий аргумент имя файла
-v подробный вывод (verbose)
-C сменить директорию перед добавлением
--exclude исключить шаблон

Создать tar.gz (gzip)

tar -czvf backup.tar.gz /home/user/project

Создать tar.xz (максимальное сжатие, но долго)

tar -cJvf archive.tar.xz myfolder/

Создать tar с указанием уровня сжатия gzip (через переменную окружения)

GZIP=-9 tar -czvf archive.tar.gz bigfile.log

Создать tar.zst (очень быстро и хорошо сжимает)

tar --zstd -cvf archive.tar.zst myfolder/
Для 7z

7z использует алгоритмы LZMA / LZMA2 (по умолчанию), а также PPMd, BZip2, Copy (без сжатия).

Основные параметры 7z:

Параметр Значение
a add – добавить файлы в архив (создать)
-r рекурсивно обрабатывать поддиректории
-mx уровень сжатия: -mx0 (без сжатия) … -mx9 (ультра)
-m0 метод сжатия: lzma2, ppmd, bzip2
-p пароль (например, -psecret)
-mhe шифровать имена файлов (только с паролем)
-v разбить на тома (например, -v100m)

Максимальное сжатие LZMA2 (очень долго, но сильно)

7z a -mx9 archive.7z myfolder/

Быстрое сжатие с PPMd (хорошо для текста)

7z a -m0=ppmd -mx5 archive.7z large_text.log

Зашифрованный 7z с паролем и шифрованием заголовков

7z a -pmy_password -mhe=on secret.7z private_data/

Упаковка с разбивкой на тома по 50 МБ

7z a -v50m splitted.7z bigfolder/

Примеры: упаковка файлов, папок, нескольких элементов

Упаковка в .zip

Один файл

zip archive.zip readme.txt

Папка (обязательно -r)

zip -r project.zip ./my_project

Несколько файлов и папок

zip -r full_backup.zip file1.txt file2.log docs/ images/
Упаковка в .tar.gz

Один файл

tar -czvf file.tar.gz script.sh

Папка

tar -czvf backup.tar.gz /var/www/html

Несколько элементов

tar -czvf mixed.tar.gz index.html css/ js/ images/ --exclude='*.tmp'
Упаковка в .7z

Один файл

7z a doc.7z manual.pdf

Папка (рекурсивно по умолчанию, но лучше явно -r)

7z a -r project.7z ./src

Несколько объектов с максимальным сжатием

7z a -mx9 total.7z file.bin folder1 folder2

Полезные советы и частые ошибки

Не забывайте про -r для zip

Если упаковать папку без -r, zip создаст архив с одним пустым каталогом.

Для tar сначала создавайте целевую папку при распаковке

Неправильно (ошибка, если папка не существует)

tar -xf archive.tar.gz -C /new/folder

Правильно

mkdir -p /new/folder && tar -xf archive.tar.gz -C /new/folder
Пробел в параметре -o для 7z

После -o не должно быть пробела:

Верно

7z x archive.7z -o/home/user/target

Ошибка

7z x archive.7z -o /home/user/target
Просмотр содержимого без распаковки
unzip -l archive.zip
tar -tf archive.tar.gz          # -t = list
7z l archive.7z

Как выбрать метод сжатия для большого проекта

Тип данных Рекомендуемый формат и параметры
Исходный код (Git-репозиторий) tar.gz (gzip -6) – быстрее, чем xz
Базы данных, дампы SQL xz или 7z – выигрыш в размере важен
Логи, текстовые файлы 7z -mx9 (PPMd) или xz -9
Двоичные файлы (jpg, exe) толку от сжатия мало – используйте tar без сжатия или zip -0
Фото / видео / аудио (уже сжатые) zip -0 или tar без компрессии (только объединение)

Заключение

Архивация в Linux через командную строку – мощный и гибкий инструмент.
Краткая шпаргалка:

Действие Команда
Распаковать .zip в папку unzip archive.zip -d /target
Распаковать .tar.gz в папку mkdir -p /target && tar -xzf archive.tar.gz -C /target
Распаковать .7z в папку 7z x archive.7z -o/target
Создать .zip из папки zip -r archive.zip folder/
Создать .tar.gz из папки tar -czf archive.tar.gz folder/
Создать .7z с максимальным сжатием 7z a -mx9 archive.7z folder/

Теперь вы готовы эффективно управлять архивами в Linux – от ежедневных бэкапов до подготовки файлов на любой платформе.