Как использовать tar: создание, сжатие и распаковка архивов
TL;DR
Tar — это утилита для архивации в Linux, которая умеет одновременно упаковывать и сжимать файлы. Установите tar через пакетный менеджер, используйте -c/-x/-f для создания и извлечения, добавляйте -z/-j/-J или -I для сжатия (gzip, bzip2, xz или свой процесс). Ниже — подробные примеры, чек-листы, рекомендации по выбору алгоритма и сценарии использования.
Быстрые ссылки
Что такое tar и как его установить?
Создание несжатого архива
Создание сжатого архива
Как получить больше экономии места с помощью более агрессивного сжатия
Другие программы сжатия
Распаковка архива

Что такое tar и как его установить?
Tar — это классическая утилита архивации в UNIX/Linux. Она собирает несколько файлов и папок в единый файл-архив (обычно с расширением .tar) и может вызывать программы сжатия для уменьшения размера выходного файла.
Определение в одном предложении: tar — инструмент для упаковки файлов в единый контейнер, с поддержкой потокового сжатия.
Для просмотра локальной справки запустите:
man tarКак установить tar на популярных дистрибутивах Linux:
- Debian/Ubuntu/Mint:
sudo apt install tar- RHEL/CentOS/Fedora:
sudo yum install tarПример подготовки тестовой папки и файлов (используется далее в примерах):
mkdir test; cd testtouch a b c d e f
echo 1 > a; echo 5 > e; echo ‘22222222222222222222’ > b
Здесь мы создали каталог test и шесть файлов, добавив в некоторые из них данные. Файл b содержит повторяющиеся символы и хорошо сжимается.
Важно: если вы не понимаете, как работает сжатие, прочитайте статью о принципах сжатия файлов — повторяющиеся данные обычно сжимаются лучше, сжатые форматы (JPEG, MP4, ZIP и т.д.) часто уже не сжимаются дополнительно.
## Создание несжатого архива

Чтобы создать простой несжатый архив, выполните:
tar -hcf all_files.tar *
Затем можно посмотреть размеры файлов:
ls -l | grep -v total | awk ‘{print $5”\tbytes for: “$9}’ | sort -n
Разбор опций команды tar, использованной выше:
- -h — dereference: следовать символическим ссылкам и архивировать файлы, на которые они указывают. Рекомендую включать всегда, чтобы в архив попадали реальные файлы, а не сломанные ссылки.
- -c — создать новый архив (create).
- -f — указание имени архива; требует аргумента (имени файла) сразу после опции.
Обратите внимание: короткие опции можно объединять: -hcf == -h -c -f.
После создания архива вы заметите, что .tar-файл может быть заметно больше суммы исходных файлов — tar добавляет метаданные и заголовки, и, разумеется, сам контейнер ничего не сжимает.
Чтобы определить тип файла в командной строке используйте:
file c
file b
file all_files.tar
Это показывает, является ли файл текстовым, бинарным, сжатым и т.п.
## Создание сжатого архива
Если требуется одновременно архивировать и сжимать, используйте дополнительные опции:
tar -zhcf all_files.tar.gz [a-f]
ls -l | grep -v total | awk ‘{print $5”\tbytes for: “$9}’ | sort -n

Здесь мы добавили -z — встроенную опцию tar для использования gzip. Обратите внимание, что в примере мы указали шаблон [a-f], чтобы не включать уже созданный all_files.tar внутрь нового архива.
Результат для данного набора файлов в примере — очень компактный архив (186 байт), потому что заголовки tar и повторяющиеся данные сжимаются хорошо. На больших файлах и реальных данных соотношения будут иными.
Советы по шаблонам и регулярным выражениям: используйте регулярные выражения и glob-выражения, чтобы контролировать, какие файлы попадут в архив; команды sed/grep/awk полезны для подготовки списка файлов.
### Когда gzip неудобен
- Данные уже сжаты (например, .zip, .jpg) — gzip не даст выигрыша.
- Требуется лучшее сжатие ценой времени — рассмотрите bzip2 или xz.
## Увеличение эффективности сжатия
Можно задать собственную команду сжатия через опцию -I (заглавная i):
tar -I ‘gzip -9’ -hcf all_files.tar.gz [a-f]
ls -l | grep -v total | awk ‘{print $5”\tbytes for: “$9}’ | sort -n

Здесь мы явно передали gzip с уровнем сжатия -9. Это обычно дает лучшее сжатие, но медленнее.
Общая зависимость:
- -1 — быстрое сжатие, меньшая степень сжатия.
- -9 — медленное сжатие, максимальная степень сжатия (для gzip/bzip2/xz могут быть разные флаги).
Пример: переключение компрессора через -I позволяет использовать нестандартные опции или внешние инструменты (pigz — многопоточный gzip и т.д.). Пример с pigz:
tar -I ‘pigz -9’ -hcf all_files.tar.gz [a-f]
pigz устанавливается отдельно и даёт ускорение на многопроцессорных системах.
## Другие программы сжатия
Tar поддерживает несколько распространённых алгоритмов через свои опции:
- -z — gzip (.gz)
- -j — bzip2 (.bz2)
- -J — xz (.xz)
- -I — произвольная команда (например, zstd, pigz)
Примеры максимизации параметров:
bzip2 с максимальным уровнем:
tar -I ‘bzip2 -9’ -hcf all_files.tar.bz2 [a-f]
xz с агрессивной настройкой:
tar -I ‘xz -9e’ -hcf all_files.tar.xz [a-f]


Замечание: более «тяжёлые» алгоритмы (bzip2/xz) часто дают лучшее сжатие, но потребляют больше CPU и времени. Для больших наборов данных стоит протестировать несколько алгоритмов и замерить время и размер.
Советы по выбору алгоритма:
- Для быстрой упаковки с хорошей скоростью и совместимостью — gzip.
- Для лучшего сжатия ценой времени — xz.
- Для многопоточной компрессии — zstd или pigz (через -I).
## Распаковка архива
Распаковка проста: используйте -x (extract).
Пример очистки примера и распаковки:
rm a b c d e f
tar -xf all_files.tar.gz
ls
Tar автоматически определяет встроенный формат, если вы используете соответствующую опцию (-z/-j/-J) или расширение; если используете -I с кастомным компрессором, при распаковке tar также сможет распаковать, если вы используете аналогичную команду или если расширение подсказывает алгоритм.
Важно: для распаковки требуется установленная программа сжатия (gzip, bzip2, xz и т.д.). Установите через пакетный менеджер при необходимости.
## Практическое руководство: чек-лист перед созданием архива
- Проверить свободное место: df -h
- Убедиться, что в архив не попадают временные/локальные файлы (.git, tmp) — используйте --exclude
- Сформировать список файлов: find . -type f | grep -E '...'
- Решить алгоритм сжатия: gzip/pigz/xz/zstd
- Определить уровень сжатия (-1..-9) по компромиссу скорость/качество
- Выполнить команду tar с --verify (если важно) или посчитать контрольные суммы
Пример исключения временных файлов:
tar –exclude=’*.log’ –exclude=’tmp’ -I ‘pigz -9’ -hcf project.tar.gz project/
## Рольовые чек-листы
- Администратор бэкапов:
- План бэкапов (ежедневно/еженедельно)
- Проверка восстановления (раз в неделю)
- Хранение контрольных сумм рядом с архивами
- Разработчик перед релизом:
- Собирать артефакты в tar вместо zip для совместимости с CI
- Исключать большие бинарники, которые хранятся отдельно
- Оператор CI/CD:
- Использовать многопоточное сжатие (pigz/zstd)
- Не сжимать артефакты, которые уже хранятся в сжатом виде
## Когда tar не подходит или где он терпит неудачу
- Нужна дедупликация на уровне блоков — рассмотрите borg или restic.
- Хочется ускорить передачу по сети с синхронизацией изменений — используйте rsync/rdiff.
- Требуется индексируемая архивация с метаданными и шифрованием — рассмотрите форматы и инструменты архивирования с поддержкой метаданных и шифрования.
## Методология тестирования компрессии (минимальная)
1. Подготовьте репрезентативный набор данных (размер, тип, структура).
2. Для каждого алгоритма и уровня сжатия:
- Засеките время (time tar ...)
- Посчитайте итоговый размер
- Проверте корректность распаковки и контрольные суммы
3. Сравните результат по соотношению Время ↔ Размер и выберите оптимум.
## Ментальная модель выбора компрессора
- Малые текстовые файлы → gzip/xz дадут выигрыш.
- Большие уже сжатые бинарные файлы → не сжимаем.
- Сервер с несколькими ядрами → используем многопоточные компрессоры (pigz, zstd).
## Примеры распространённых команд
Создать архив каталога project и исключить временные файлы:
tar –exclude=’*.log’ -I ‘pigz -9’ -hcf project.tar.gz project/
Распаковать архив в текущую директорию:
tar -xf project.tar.gz
Просмотреть содержимое архива без распаковки:
tar -tf archive.tar.gz
Извлечь один файл из архива:
tar -xf archive.tar.gz path/inside/archive/file.txt
Параллельное сжатие с zstd (если установлен):
tar -I ‘zstd -T0 -19’ -hcf archive.tar.zst files/
## Критерии приёмки
- Архив создаётся без ошибок и содержит ожидаемые файлы.
- Архив распаковывается и файлы идентичны оригиналам (проверка контрольной суммы).
- Размер и время сжатия соответствуют допустимым требованиям (политика SLA или внутренняя цель).
## Визуальное руководство: упрощённый алгоритм выбора (Mermaid)
flowchart TD A[Нужно архивировать?] –>|Да| B{Данные уже сжаты?} B –>|Да| C[Только тар без сжатия] B –>|Нет| D{Нужна скорость или размер важнее?} D –>|Скорость| E[Использовать pigz/zstd с низким уровнем] D –>|Размер| F[Использовать xz или zstd с высоким уровнем] C –> G[Создать .tar] E –> G F –> G G –> H[Хранение/передача/проверка]
## Короткий глоссарий
- tar — утилита архивации
- gzip, bzip2, xz, zstd — алгоритмы/инструменты сжатия
- pigz — многопоточный gzip
- -c/-x/-f/-z/-j/-J/-I — ключи tar для создания, извлечения, имени архива и выбора компрессора
## Безопасность и приватность
- Архивы не шифруются автоматически. Если нужны конфиденциальность и защита, применяйте шифрование (gpg, openssl) поверх полученного .tar.* файла.
- Храните список контрольных сумм и метаданных отдельно от архива для возможности проверки целостности.
## Заключение
Tar — гибкий инструмент архивации с мощной интеграцией алгоритмов сжатия. Он остаётся удобным выбором для бэкапов, упаковки релизов и переноса наборов файлов. Подбирайте компрессор и уровень сжатия под задачу — учитывайте компромисс между скоростью и размером. Тестируйте на репрезентативных данных и автоматизируйте проверку восстановления.
Важно: всегда проверяйте распаковку после создания резервной копии.
---
Спасибо за внимание. Удачного архивирования!Похожие материалы
Intercom на HomePod и iPhone — как пользоваться
Многокомнатное аудио на Amazon Echo — настройка
Как запустить Minecraft Realms — простой сервер за 10 минут
Как чистить ремешок Apple Watch правильно
Как заблокировать сайт в Firefox на ПК и мобильных