🧳 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

Файл: `/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"
0 2 * * * /usr/local/bin/backup_home.sh

(Запуск ежедневно в 2:00 ночи)

Файл: /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
0 3 * * 0 /usr/local/bin/backup_etc_logs.sh

(Каждое воскресенье в 3:00)

#!/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"
0 1 * * * /usr/local/bin/backup_mysql.sh
  • Используйте set -e для выхода при ошибке.
  • Убедитесь, что папки /backup и /var/log существуют.
  • Ограничьте доступ к скриптам и логам (права 700/600).
  • Храните пароли безопасно (желательно не в скрипте).
  • Настройте ротацию логов или удаление старых архивов.