Linux: архивы, сжатие и распаковка
Создание, просмотр, распаковка и проверка tar, gzip, bzip2, xz, zip и 7z-архивов
Ключи tar, которые нужно знать
| Ключ | Значение |
| -c | create: создать архив |
| -x | extract: распаковать |
| -t | list: показать содержимое без распаковки |
| -r / -u | append / update: добавить или обновить файлы (только для несжатых архивов) |
| -d | diff: сравнить архив с файлами на диске |
| -f | file: имя архива (должен идти последним из ключей с файлом перед ним) |
| -v | verbose: выводить имена файлов |
| -z / -j / -J | gzip (.gz), bzip2 (.bz2), xz (.xz) |
| --zstd | zstd (.zst), нужен установленный zstd и GNU tar 1.31+ |
| -C | change directory: перейти в папку до операции |
| -p | сохранять права доступа при распаковке |
| --exclude | исключить файлы по шаблону |
Создание архивов tar
| Команда | Вариант | Что делает |
| tar -cvf | tar -cvf backup.tar ./data | Несжатый архив. |
| tar -czvf | tar -czvf backup.tar.gz ./data | Архив, сжатый gzip (самый распространённый). |
| tar -cjvf | tar -cjvf backup.tar.bz2 ./data | Сжатие bzip2: медленнее, чуть лучше сжимает. |
| tar -cJvf | tar -cJvf backup.tar.xz ./data | Сжатие xz: максимальное сжатие, но медленнее. |
| tar --zstd -cvf | tar --zstd -cvf backup.tar.zst ./data | Сжатие zstd: быстро и хорошо. |
| tar -cvf | tar -cvf etc-$(date +%F).tar /etc | Имя архива с датой. |
| tar -C | tar -czvf app.tgz -C /opt app | Архив без лишних родительских путей внутри. |
| tar --exclude | tar --exclude='*.log' --exclude=node_modules -czvf app.tgz app/ | Исключить шаблоны из архива. |
| tar -T | tar -czvf out.tgz -T files.txt | Взять список файлов из текстового файла. |
| find | tar | find . -name "*.conf" -print0 | tar --null -czvf conf.tgz -T - | Архив из результатов поиска (безопасно для имён с пробелами). |
| tar -cf - | ssh | tar -czf - ./data | ssh user@backup 'cat > /backup/data.tgz' | Потоковая отправка архива на другой сервер без промежуточного файла. |
| tar -cf - | ssh | tar -czf - ./data | ssh user@host 'tar -xzf - -C /srv/restore' | Перенос папки на удалённый сервер и распаковка там же. |
Просмотр и проверка tar
| Команда | Вариант | Что делает |
| tar -tf | tar -tf backup.tar | Список файлов в архиве. |
| tar -tvf | tar -tvf backup.tar.gz | Список с правами, размером и датой. |
| tar -tzf | grep | tar -tzf app.tgz | grep "config" | Поиск файла внутри архива. |
| tar -dzf | tar -dzf backup.tgz -C /restore | Сравнить архив с файлами на диске (покажет отличия). |
| sha256sum | sha256sum backup.tar.gz > backup.tar.gz.sha256 | Контрольная сумма, чтобы потом проверить целостность. |
| sha256sum -c | sha256sum -c backup.tar.gz.sha256 | Проверка контрольной суммы. |
Распаковка tar
| Команда | Вариант | Что делает |
| tar -xf | tar -xf backup.tar | Распаковать в текущую папку. |
| tar -xzf | tar -xzf backup.tar.gz | Распаковать gzip-архив. |
| tar -xjf | tar -xjf backup.tar.bz2 | Распаковать bzip2-архив. |
| tar -xJf | tar -xJf backup.tar.xz | Распаковать xz-архив. |
| tar --zstd | tar --zstd -xf backup.tar.zst | Распаковать zstd-архив. |
| tar -xzf -C | tar -xzf app.tgz -C /opt/app | Распаковать в указанную папку (она должна существовать). |
| tar -xzf | tar -xzf app.tgz app/config.yml | Извлечь один конкретный файл. |
| tar --strip-components | tar --strip-components=1 -xzf app.tgz -C /opt/app | Убрать верхний уровень папок внутри архива. |
| tar -xvf | tar -xvf backup.tar | Показывать распаковываемые файлы. |
| tar -k | tar -xkf backup.tar | Не перезаписывать существующие файлы. |
| tar --overwrite | tar --overwrite -xf backup.tar | Перезаписывать существующие файлы без вопроса. |
| tar --no-same-owner | tar --no-same-owner -xf backup.tar | Не восстанавливать владельца файлов (полезно, когда распаковываете не от root). |
| tar -p | sudo tar -xpf system.tar -C / | Восстановить права доступа (нужен root). |
Сжатие и распаковка отдельных файлов
| Команда | Вариант | Что делает |
| gzip | gzip data.sql | Сжимает и удаляет исходный файл (получится data.sql.gz). |
| gzip -k | gzip -k data.sql | Сжимает, оставляя исходный файл. |
| gzip -9 | gzip -9 -k data.sql | Максимальная степень сжатия. |
| gzip -l | gzip -l data.sql.gz | Сколько места экономит сжатие. |
| gzip -t | gzip -t data.sql.gz | Проверка целостности, без распаковки. |
| gunzip | gunzip data.sql.gz | Распаковывает и удаляет архив. |
| gunzip -k | gunzip -k data.sql.gz | Распаковывает, оставляя .gz. |
| zcat | zcat data.sql.gz | head | Читает сжатый файл, не распаковывая на диск. |
| gzip -c | mysqldump db | gzip -c > db.sql.gz | Сжатие потока данных через пайп. |
| bzip2 / bunzip2 | bzip2 -k file ; bunzip2 -k file.bz2 | Сжатие и распаковка bzip2. |
| xz / unxz | xz -9 -k file ; unxz -k file.xz | Сжатие и распаковка xz. |
| xz -T0 | tar -cf - data | xz -T0 > data.tar.xz | Многопоточное сжатие xz (T0 — все ядра). |
zip и 7z
| Команда | Вариант | Что делает |
| zip -r | zip -r archive.zip ./dir | Рекурсивный архив zip. |
| zip -e | zip -er secret.zip ./dir | Архив с паролем (запросит пароль). |
| zip -d | zip -d archive.zip old.txt | Удалить файл из архива. |
| zip -u | zip -ur archive.zip ./dir | Обновить только изменившиеся файлы. |
| zip -x | zip -r a.zip ./dir -x "*.log" | Исключить шаблон. |
| unzip -l | unzip -l archive.zip | Список содержимого. |
| unzip -d | unzip archive.zip -d /opt/app | Распаковать в папку. |
| unzip -o | unzip -o archive.zip | Перезаписывать без вопроса. |
| unzip -t | unzip -t archive.zip | Проверка целостности. |
| 7z a | 7z a archive.7z ./dir | Создать архив 7z (пакет p7zip-full). |
| 7z x | 7z x archive.7z -o/opt/app | Распаковать с сохранением структуры в указанную папку. |
| 7z l | 7z l archive.7z | Список содержимого. |
| 7z -p | 7z a -p -mhe=on secret.7z ./dir | Архив с паролем и шифрованными именами файлов. |
Типовые задачи
# Резервная копия каталога с датой и сжатием
tar -czvf /backup/www-$(date +%F).tar.gz /var/www
# Восстановить архив в исходные места, сохранив права (от root)
sudo tar -xzpf /backup/www-2026-10-01.tar.gz -C /
# Посмотреть, что занимает место в архиве, без распаковки
tar -tzvf backup.tar.gz | sort -k3 -n | tail
# Распаковать и сразу проверить на ошибки
tar -xzf app.tgz && echo "OK"
# Архив только новых файлов с момента указанной даты
tar -czf recent.tgz --newer-mtime="2026-10-01" ./data
Распаковка архива из недоверенного источника может перезаписать системные файлы или выйти за пределы папки (атака zip-slip). Сначала смотрите список через -t, а распаковывайте в отдельную временную папку через -C.
Чтобы получить список файлов, пригодный для повторного использования, сочетайте find ... -print0 с tar --null -T -. Так работают даже имена с пробелами и переносами строк.