p7zip (7zip) в Ubuntu: установка и примеры использования
p7zip — это порт консольной версии 7-Zip для Linux/Unix. В этой статье показано, как установить p7zip в Ubuntu, базовые и продвинутые команды (создание, распаковка, обновление, шифрование, разбивка), рекомендации по использованию для бэкапов и примеры скриптов и чек-листов для системных администраторов.
Введение
Если вы используете Microsoft Windows, то, вероятно, знакомы с 7-Zip — открытым архиватором с высокой степенью сжатия. На Linux/Unix его консольная версия называется p7zip. Она поддерживает формат .7z (высокая степень сжатия) и многие другие форматы для распаковки/архивации.
Краткое определение: p7zip — консольный порт 7-Zip для Linux/Unix; предоставляет утилиту 7z для создания и работы с архивами.
Ключевые возможности (кратко):
- Поддержка 7z, zip, gzip, tar и множества других форматов.
- AES-256 шифрование для 7z и zip.
- Возможность создания самораспаковывающихся архивов (SFX) для Windows.
- Инструменты командной строки для автоматизации.
В следующих разделах — пошаговые примеры, сценарии использования, рекомендации безопасности и чек-листы.
Поддерживаемые форматы
p7zip может работать с большим количеством форматов. Короткий перевод списка форматов для распаковки и упаковки:
- Основные форматы упаковки: 7z, XZ, BZIP2, GZIP, TAR, ZIP, WIM.
- Дополнительно распаковываются: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VMDK, XAR, Z.
Важно: поддержка форматов зависит от сборки и пакетов (например, p7zip-rar нужен для работы с RAR).
Загрузка и установка p7zip в Ubuntu
Установка в Ubuntu (инструкция проверена на Ubuntu 18.04 LTS):
sudo apt-get install p7zip-full p7zip-rarПакет p7zip-full включает исполняемый 7z и дополнительные возможности. p7zip-rar добавляет распаковку RAR.
Совет: на серверах используйте apt-get без GUI: добавьте -y для автоматической установки в скриптах.
sudo apt-get update && sudo apt-get install -y p7zip-full p7zip-rarСинтаксис команды 7z
Команда, устанавливаемая пакетом, называется 7z. Её общий синтаксис:
7z [adeltux] [-] [SWITCH] ... Интерпретация:
- Первая позиция — команда действия: a (add), x (extract with full paths), e (extract without paths), l (list), u (update), d (delete) и т. д.
- SWITCH — дополнительные ключи, например -p (пароль), -m (параметры сжатия), -v (разделение), -sdel (удалить исходники после добавления).
Примеры: базовые операции
Создание архива .7z из всех файлов в каталоге (переходим в каталог):
$ 7z a files.7z *Пример вывода на экране (команда в действии):

После выполнения будет создан файл files.7z в текущем каталоге.
Распаковка архива (без восстановления путей):
7z e files.7zРаспаковка с восстановлением структуры каталогов:
7z x files.7z
Создание ZIP-архива с помощью 7z:
7z a archive.zip folder_or_files
Обновление существующего архива (добавление новых файлов):
7z u files.7z file5.txt
Просмотр содержимого архива:
7z l files.7z
Удаление файла из архива:
7z d archive.7z path/inside/archive.txtЕсли файл находится в подкаталоге внутри архива, можно указать -r для рекурсивного удаления (в официальной документации к 7z есть оговорки по использованию -r — используйте с осторожностью).
Полезные ключи и уровни сжатия
- -mx=0..9 — уровень сжатия (0 — без сжатия, 9 — максимальная степень). По умолчанию часто используется -mx=5.
- -m0=METHOD — выбрать метод сжатия (LZMA2, PPMd, BZip2 и т.д.).
- -mhe=on — шифровать имена файлов (Hidden Encrypted Headers).
- -pPASSWORD — задать пароль (небезопасно в командной строке: пароль будет виден в истории и в списке процессов).
- -sdel — удалить исходные файлы после успешного добавления в архив.
- -vSIZE — разбить архив на тома (пример: -v10m для 10 мегабайтных томов).
- -tTYPE — задать тип архива (например, -tzip).
- -sfx — создать самораспаковывающийся архив (SFX) для Windows (требует sfx-модуля).
- -so / -si — читать/писать на stdout/stdin (удобно для конвейеров с tar).
Примеры:
Максимальное сжатие LZMA2:
7z a -t7z -m0=lzma2 -mx=9 archive.7z folderШифрование содержимого и имён файлов (AES-256):
7z a -t7z -mhe=on -pКоманда попросит ввести пароль интерактивно (это безопаснее, чем писать пароль в командной строке).
Разбивка архива на тома (по 100M):
7z a -v100m archive.7z folderТестирование архива:
7z t archive.7zРекомендации по бэкапам и предостережения
Автор 7-Zip предупреждает: не используйте формат 7z для бэкапов, если вам важно сохранить владельца и группу файлов в Linux/Unix. Формат 7z не хранит owner/group и дополнительные unix-метаданные (в отличие от tar).
Рекомендуемая методика для создания переносимого архива с сохранением Unix-метаданных: используйте tar + 7z на вход/выход.
Пример создания архива с сохранением владельцев и прав:
# сделать tar-архив в stdout и сжать его 7z, сохраняя метаданные
tar cf - directory | 7za a -si directory.tar.7z
# восстановление
7za x -so directory.tar.7z | tar xf -Перевод оригинального предупреждения разработчиков (содержимое для внимания):
DO NOT USE the 7-zip format for backup purpose on Linux/Unix because :
- 7-zip does not store the owner/group of the file.
On Linux/Unix, in order to backup directories you must use tar :
- to backup a directory : tar cf - directory | 7za a -si directory.tar.7z
- to restore your backup : 7za x -so directory.tar.7z | tar xf -
If you want to send files and directories (not the owner of file) to others Unix/MacOS/Windows users, you can use the 7-zip format.
example : 7za a directory.7z directory
Do not use "-r" because this flag does not do what you think.
Do not use directory/* because of ".*" files (example : "directory/*" does not match "directory/.profile")Важно: это дословная техническая рекомендация — используйте tar для резервных копий, когда важны права и владельцы файлов.
Безопасность и шифрование
- 7z поддерживает AES-256 для шифрования содержимого и заголовков (если включено -mhe=on).
- Никогда не передавайте пароль в открытой форме в командной строке (ключ -pPASSWORD), если среда небезопасна.
- Для автоматизации используйте защищённые хранилища секретов, переменные окружения, или ввод пароля через stdin/TTY.
Пример чтения пароля из файла с ограниченным доступом (не идеально, но чаще лучше, чем видимый в ps):
PASSWORD=$(cat /root/.7z_pass)
7z a -p"$PASSWORD" archive.7z folderУбедитесь, что файл /root/.7z_pass имеет права 600 и доступен только нужному пользователю.
Автоматизация: пример скрипта для еженедельного бэкапа
Ниже — упрощённый пример скрипта, который делает tar-архив каталога, сжимает 7z, хранит ротацию из трёх файлов и использует защищённый пароль из файла.
#!/bin/bash
set -euo pipefail
BACKUP_DIR=/var/backups/myapp
SRC_DIR=/srv/myapp/data
PASSFILE=/root/.7z_pass
DATE=$(date +%F)
ARCHIVE=${BACKUP_DIR}/myapp-${DATE}.tar.7z
mkdir -p ${BACKUP_DIR}
# создать архив tar и сжать в 7z, сохраняя права/владельца
tar cf - ${SRC_DIR} | 7za a -si -p"$(cat ${PASSFILE})" -mhe=on ${ARCHIVE}
# ротация: оставить 3 файла
ls -1t ${BACKUP_DIR}/myapp-*.tar.7z | tail -n +4 | xargs -r rm --Поместите этот скрипт в /usr/local/bin и добавьте cron:
0 3 * * 0 /usr/local/bin/myapp-backup.shКритерии приёмки: резервная копия должна распаковываться и содержать ожидаемые файлы, тест восстановления обязателен.
Рольные чек-листы
Системный администратор:
- Установить p7zip-full и p7zip-rar.
- Настроить безопасное хранение паролей (файлы с правами 600, Vault и т.п.).
- Настроить cron для регулярных бэкапов и тестовое восстановление.
- Документировать процедуру восстановления в runbook.
Разработчик / DevOps:
- Использовать tar | 7za a -si для сохранения Unix-метаданных.
- Добавить мониторинг пространства и уведомления об ошибках команды.
- Автоматизировать тестирование целостности (7z t).
Обычный пользователь:
- Для пересылки файлов коллегам выберите .7z или .zip с паролем.
- При передаче больших файлов используйте разбивку -v.
- Неставьте пароли в общедоступные скрипты.
Частые ошибки и решение проблем
Проблема: «Нет доступа» при распаковке
- Проверьте права на файл и каталог назначения.
- Если архив создавался с root и содержит владельцев, распаковка под другим пользователем может требовать sudo.
Проблема: «Corrupted archive» при распаковке
- Проверьте контрольную сумму загруженного файла.
- Используйте 7z t для тестирования архива.
Проблема: Нужен RAR
- Установите p7zip-rar (распаковка RAR); создание RAR не поддерживается p7zip.
Выходные коды: 7z возвращает ненулевой код при ошибке. Для CI/скриптов обязательно обрабатывать ошибки (set -e или проверка $? ).
Альтернативы и когда p7zip не подходит
- tar + gzip/bzip2/xz — лучше для локальных бэкапов с сохранением прав/владельцев.
- zip/unzip — удобны для совместимости с Windows, но хуже сжатие по сравнению с 7z.
- zx (или контейнерные форматы) — если нужны специфичные метаданные или транзакционные бэкапы.
Выбор руководствуется задачей: если важна максимальная степень сжатия — 7z; если критично хранение unix-метаданных — tar; если нужна совместимость с Windows-пользователями без дополнительных утилит — zip.
Быстрая шпаргалка (cheat sheet)
Создать .7z с максимальным сжатием:
7z a -t7z -m0=lzma2 -mx=9 archive.7z folderСоздать зашифрованный .7z (шифруются имена файлов):
7z a -t7z -mhe=on -p archive.7z folderСоздать zip:
7z a -tzip archive.zip folderРаспаковать с восстановлением путей:
7z x archive.7zПосмотреть содержимое:
7z l archive.7zРазбить на тома (по 100 MB):
7z a -v100m archive.7z folderТест архива:
7z t archive.7zУдалить файл из архива:
7z d archive.7z path/inside/file.txtМодель принятия решения (диаграмма)
flowchart TD
A[Нужна высокая степень сжатия?] -->|Да| B[Использовать 7z]
A -->|Нет| C[Нужна совместимость с Windows?]
C -->|Да| D[Использовать zip]
C -->|Нет| E[Нужны unix-метаданные?]
E -->|Да| F[Использовать tar '+7z для сжатия']
E -->|Нет| G[Выбор по удобству]Критерии приёмки
- Архив успешно создаётся без ошибок.
- 7z t показывает, что архив не повреждён.
- При использовании tar+7za восстановление возвращает файлы с ожидаемыми правами и содержимым.
- Автоматизированный скрипт бэкапа завершает работу и сохраняет архив в целевой папке.
FAQ
Q: Можно ли использовать p7zip для бэкапов серверов?
A: Можно, но если важно сохранить владельцев/группы и права, комбинируйте tar и 7za (tar cf - dir | 7za a -si archive.tar.7z).
Q: Как безопасно передавать пароль для архива в скриптах?
A: Храните пароль в защищённом файле с правами 600 или используйте секретное хранилище (Vault, KMS) и извлекайте пароль в runtime.
Q: Поддерживает ли p7zip создание RAR?
A: Нет. p7zip может распаковывать RAR, но создание RAR-файлов не поддерживается.
Заключение
p7zip — мощный инструмент для сжатия и архивации на Linux. Он прост в установке, богат по функционалу и удобен для автоматизации. Для переносимых пакетов и пересылки файлов он отлично подходит; для критичных бэкапов используйте tar вместе с 7za, чтобы сохранить специфичные Unix-метаданные. Попробуйте базовые команды, затем добавьте шифрование и автоматизацию по мере необходимости.
Полезные ссылки: man 7z, официальная документация 7-Zip и страницы поддержки (SourceForge/Tom’s Hardware для исторической информации).
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента