ITcompressor IT — сжато и по делу
← Назад к статьям

Работа с архивами через консоль

Форматы делятся на три группы: контейнеры (tar) — только собирают файлы вместе, сжиматели (gzip, bzip2, xz) — сжимают один файл, архиваторы (zip, rar, 7z) — сами и собирают, и сжимают.

Формат Расширение Пакет
ZIP .zip zip, unzip
RAR .rar rar, unrar (non-free)
TAR .tar предустановлен
GZIP .gz предустановлен
BZIP2 .bz2 предустановлен
XZ .xz предустановлен
7Z .7z p7zip-full

Все примеры дальше — вокруг одного каталога:

project/
├── app.py
└── data/
    └── customers.csv

ZIP архивы#

Нужны пакеты zip и unzip (в Debian-подобных: apt install zip unzip).

# Создать архив каталога целиком
zip -r project.zip project/

# Добавить файл в уже собранный архив
zip project.zip notes.txt

# Распаковать в текущий каталог
unzip project.zip

# Распаковать в конкретный каталог
unzip project.zip -d ~/restore
# Посмотреть содержимое, не распаковывая
unzip -l project.zip

# Создать с паролем (спросит интерактивно)
zip -e -r project.zip project/

# Распаковать защищённый архив — пароль спросит здесь
unzip project.zip

Внутри ZIP сжимает каждый файл по отдельности — удобно точечно добавлять/забирать файлы, но на каталоге целиком ZIP проигрывает tar.gz и 7z.

RAR архивы#

Проприетарный формат: для создания нужен пакет rar, для распаковки хватает бесплатного unrar (в Debian-подобных оба лежат в non-free).

# Создать архив каталога (a = add)
rar a project.rar project/

# С паролем (спросит интерактивно)
rar a -p project.rar project/

# Многотомный архив по 100 МБ каждый
rar a -v100m project.rar project/
# Распаковать с сохранением структуры каталогов
unrar x project.rar

# Ссыпать всё содержимое в текущую папку, пути отбрасываются
unrar e project.rar

Команды rar и unrar симметричны: rar x project.rar и rar e project.rar работают так же. Разница x/e — только в сохранении путей.

TAR контейнеры#

tar сам не сжимает — склеивает файлы в один поток. Сжатие включается фильтром-флагом: z — gzip, j — bzip2, J — xz.

Флаг Что делает
c создать архив
x извлечь
t показать содержимое
z фильтр gzip (.tar.gz)
j фильтр bzip2 (.tar.bz2)
J фильтр xz (.tar.xz)
v подробный вывод
f дальше — имя файла архива
-C сменить каталог
# Создать сжатый архив каталога (gzip)
tar -czf project.tar.gz project/

# То же с xz: сжатие сильнее, процесс медленнее
tar -cJf project.tar.xz project/

# Посмотреть содержимое, не распаковывая
tar -tzf project.tar.gz

# Распаковать в текущий каталог
tar -xzf project.tar.gz

# Распаковать в конкретный каталог
tar -xzf project.tar.gz -C ~/restore

GNU tar угадывает фильтр по расширению: tar -xf project.tar.xz сработает так же, как -xzf/-xjf. Старый синтаксис без дефиса (tar zxvf …) ещё работает, но современный GNU-стиль — с дефисом.

GZ архивы#

gzip сжимает один файл: app-2026-06-30.log превращается в app-2026-06-30.log.gz, оригинал по умолчанию удаляется.

# Сжать лог (оригинал удалится)
gzip app-2026-06-30.log

# Сжать, оставив оригинал (-k = keep)
gzip -k app-2026-06-30.log

# Максимальное сжатие (1..9, по умолчанию 6)
gzip -9 app-2026-06-30.log

# Распаковать (= gzip -d)
gunzip app-2026-06-30.log.gz

Сжатые логи читаются и grep-аются на лету, без распаковки:

zcat app-2026-06-30.log.gz          # вывести в stdout
zless app-2026-06-30.log.gz         # постранично
zgrep ERROR app-2026-06-30.log.gz   # поиск по сжатому

Каталог так не сжать — сначала соберите его в tar: tar -czf project.tar.gz project/.

XZ архивы#

Работает как gzip, но сжимает сильнее и медленнее — стандарт для образов дистрибутивов и пакетов.

# Сжать образ
xz raspi-lite.img

# Сжать, оставив оригинал
xz -k raspi-lite.img

# Максимальная степень (0..9; 9e — с агрессивной памятью под словарь)
xz -9e raspi-lite.img

# Распаковать (= xz -d)
unxz raspi-lite.img.xz

.tar.xz распаковывается как и любой tar-архив: tar -xJf project.tar.xz или универсально tar -xf project.tar.xz.

7z архивы#

Формат с наилучшим сжатием и поддержкой чужих форматов. Нужен пакет p7zip-full (в Debian-подобных: apt install p7zip-full).

# Создать архив каталога
7z a project.7z project/

# Посмотреть содержимое
7z l project.7z

# Распаковать в текущий каталог
7z x project.7z

# Распаковать в конкретный каталог (путь сразу за -o, без пробела)
7z x project.7z -o$HOME/restore

# С паролем (спросит интерактивно)
7z a -p project.7z project/

7z x вскрывает и чужие форматы: тот же вызов распакует project.zip, project.tar.gz или project.rar.

Полезная связка — конвейер 7z + tar для распаковки на лету:

7z x -so project.tar.7z | tar xf - -C ~/restore
← Назад к статьям