Архивы в 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 – от ежедневных бэкапов до подготовки файлов на любой платформе.