🧳 7-Zip (7z) в Linux: Полное руководство
`7z` — это архиватор с высокой степенью сжатия, использующий формат .7z. В Linux доступен через пакет p7zip (и его вариации).
📦 Установка
Для большинства дистрибутивов установка выполняется стандартными средствами:
Debian/Ubuntu
sudo apt update sudo apt install p7zip-full p7zip-rar
RHEL/CentOS/Fedora
sudo dnf install p7zip p7zip-plugins
Arch Linux
sudo pacman -S p7zip
📁 Базовые команды
Создание архива
7z a archive.7z file1 file2 folder/
Распаковка архива
7z x archive.7z
Просмотр содержимого архива
7z l archive.7z
Тестирование архива
7z t archive.7z
🔐 Шифрование и пароли
Архивация с паролем
7z a -pSECRET archive.7z file1
Шифрование имён файлов
7z a -pSECRET -mhe=on archive.7z file1
Параметр `-mhe=on` включает скрытие структуры архива (имена файлов также зашифрованы).
⚙️ Ключевые параметры
Ключ | Назначение |
---|---|
-a | Добавить в архив |
-x | Извлечь с полным путём |
-e | Извлечь без структуры каталогов |
-t<type> | Указать тип архива (7z, zip, tar и др.) |
-p<пароль> | Установить пароль |
-mhe=on | Шифровать структуру архива |
-mx=<0-9> | Степень сжатия (0 — нет, 9 — макс.) |
-r | Рекурсивно (вложенные папки) |
📂 Работа с другими форматами
7z поддерживает множество форматов: zip, tar, gzip, bzip2, xz, iso, rar (только распаковка) и др.
Примеры
Распаковка `.zip`:
7z x archive.zip
Создание `.tar.7z`:
tar cf - folder/ | 7z a -si archive.tar.7z
Распаковка `.tar.7z`:
7z x archive.tar.7z tar xf archive.tar
🧪 Проверка архива
После архивации рекомендуется тестировать архив:
7z t archive.7z
Ошибки будут выведены в консоль.
📊 Примеры полезных сценариев
Архивация директории с максимальным сжатием и паролем
7z a -mx=9 -pMySecret -mhe=on backup.7z /home/user/documents
Бэкап с логированием
7z a -mx=9 backup.7z /etc 2>&1 | tee /var/log/backup_7z.log
Архивировать все `.log` из каталога
find /var/log -name "*.log" | xargs 7z a logs.7z
📘 Дополнительно
- Документация: https://7-zip.org
- Формат `.7z` поддерживает LZMA, LZMA2, PPMd, BZip2
- В p7zip отсутствует полноценная поддержка создания многочастных (split) архивов, но есть обходные решения с `split`
💡 Рекомендации по использованию в скриптах
- Используйте `set -e` в bash-скриптах для обработки ошибок.
- Всегда проверяйте результат архивирования с помощью `7z t`.
- При использовании в автоматизации — экранируйте пароли.
🧭 Шаблоны автоматического резервного копирования с 7z и cron
🗂️ Шаблон 1: Бэкап каталога с логированием и шифрованием
Файл: `/usr/local/bin/backup_home.sh`
- backup_home.sh
#!/bin/bash set -e # Параметры SRC="/home" DST="/backup" DATE=$(date +"%Y-%m-%d") ARCHIVE="home_backup_$DATE.7z" LOG="/var/log/7z_home_backup.log" PASSWORD="MySecretPass" # Создание директории mkdir -p "$DST" # Архивация 7z a -mx=9 -p"$PASSWORD" -mhe=on "$DST/$ARCHIVE" "$SRC" >> "$LOG" 2>&1 echo "[$(date)] Backup completed: $DST/$ARCHIVE" >> "$LOG"
🕒 Пример строки в crontab
0 2 * * * /usr/local/bin/backup_home.sh
(Запуск ежедневно в 2:00 ночи)
📁 Шаблон 2: Бэкап конфигурации /etc и логов
Файл: /usr/local/bin/backup_etc_logs.sh
- backup_etc_logs.sh
#!/bin/bash set -e DATE=$(date +"%Y-%m-%d") DST="/backup" mkdir -p "$DST" 7z a -mx=9 "$DST/etc_$DATE.7z" /etc > /var/log/7z_etc.log 2>&1 7z a -mx=9 "$DST/logs_$DATE.7z" /var/log > /var/log/7z_logs.log 2>&1
🕒 Crontab: запуск по воскресеньям
0 3 * * 0 /usr/local/bin/backup_etc_logs.sh
(Каждое воскресенье в 3:00)
📦 Шаблон 3: Бэкап базы данных (MySQL + архив)
#!/bin/bash set -e DATE=$(date +"%Y-%m-%d") DST="/backup/mysql" mkdir -p "$DST" # Дамп базы данных mysqldump -u root -pMyPassword mydb > "$DST/db_$DATE.sql" # Архивируем 7z a -mx=9 "$DST/db_$DATE.7z" "$DST/db_$DATE.sql" # Удаляем исходный файл rm "$DST/db_$DATE.sql"
🕒 Crontab: ежедневно в 1:00
0 1 * * * /usr/local/bin/backup_mysql.sh
💡 Рекомендации
- Используйте set -e для выхода при ошибке.
- Убедитесь, что папки /backup и /var/log существуют.
- Ограничьте доступ к скриптам и логам (права 700/600).
- Храните пароли безопасно (желательно не в скрипте).
- Настройте ротацию логов или удаление старых архивов.