Linux: архивы, сжатие и распаковка

Создание, просмотр, распаковка и проверка tar, gzip, bzip2, xz, zip и 7z-архивов

Ключи tar, которые нужно знать

КлючЗначение
-ccreate: создать архив
-xextract: распаковать
-tlist: показать содержимое без распаковки
-r / -uappend / update: добавить или обновить файлы (только для несжатых архивов)
-ddiff: сравнить архив с файлами на диске
-ffile: имя архива (должен идти последним из ключей с файлом перед ним)
-vverbose: выводить имена файлов
-z / -j / -Jgzip (.gz), bzip2 (.bz2), xz (.xz)
--zstdzstd (.zst), нужен установленный zstd и GNU tar 1.31+
-Cchange directory: перейти в папку до операции
-pсохранять права доступа при распаковке
--excludeисключить файлы по шаблону

Создание архивов tar

КомандаВариантЧто делает
tar -cvftar -cvf backup.tar ./dataНесжатый архив.
tar -czvftar -czvf backup.tar.gz ./dataАрхив, сжатый gzip (самый распространённый).
tar -cjvftar -cjvf backup.tar.bz2 ./dataСжатие bzip2: медленнее, чуть лучше сжимает.
tar -cJvftar -cJvf backup.tar.xz ./dataСжатие xz: максимальное сжатие, но медленнее.
tar --zstd -cvftar --zstd -cvf backup.tar.zst ./dataСжатие zstd: быстро и хорошо.
tar -cvftar -cvf etc-$(date +%F).tar /etcИмя архива с датой.
tar -Ctar -czvf app.tgz -C /opt appАрхив без лишних родительских путей внутри.
tar --excludetar --exclude='*.log' --exclude=node_modules -czvf app.tgz app/Исключить шаблоны из архива.
tar -Ttar -czvf out.tgz -T files.txtВзять список файлов из текстового файла.
find | tarfind . -name "*.conf" -print0 | tar --null -czvf conf.tgz -T -Архив из результатов поиска (безопасно для имён с пробелами).
tar -cf - | sshtar -czf - ./data | ssh user@backup 'cat > /backup/data.tgz'Потоковая отправка архива на другой сервер без промежуточного файла.
tar -cf - | sshtar -czf - ./data | ssh user@host 'tar -xzf - -C /srv/restore'Перенос папки на удалённый сервер и распаковка там же.

Просмотр и проверка tar

КомандаВариантЧто делает
tar -tftar -tf backup.tarСписок файлов в архиве.
tar -tvftar -tvf backup.tar.gzСписок с правами, размером и датой.
tar -tzf | greptar -tzf app.tgz | grep "config"Поиск файла внутри архива.
tar -dzftar -dzf backup.tgz -C /restoreСравнить архив с файлами на диске (покажет отличия).
sha256sumsha256sum backup.tar.gz > backup.tar.gz.sha256Контрольная сумма, чтобы потом проверить целостность.
sha256sum -csha256sum -c backup.tar.gz.sha256Проверка контрольной суммы.

Распаковка tar

КомандаВариантЧто делает
tar -xftar -xf backup.tarРаспаковать в текущую папку.
tar -xzftar -xzf backup.tar.gzРаспаковать gzip-архив.
tar -xjftar -xjf backup.tar.bz2Распаковать bzip2-архив.
tar -xJftar -xJf backup.tar.xzРаспаковать xz-архив.
tar --zstdtar --zstd -xf backup.tar.zstРаспаковать zstd-архив.
tar -xzf -Ctar -xzf app.tgz -C /opt/appРаспаковать в указанную папку (она должна существовать).
tar -xzftar -xzf app.tgz app/config.ymlИзвлечь один конкретный файл.
tar --strip-componentstar --strip-components=1 -xzf app.tgz -C /opt/appУбрать верхний уровень папок внутри архива.
tar -xvftar -xvf backup.tarПоказывать распаковываемые файлы.
tar -ktar -xkf backup.tarНе перезаписывать существующие файлы.
tar --overwritetar --overwrite -xf backup.tarПерезаписывать существующие файлы без вопроса.
tar --no-same-ownertar --no-same-owner -xf backup.tarНе восстанавливать владельца файлов (полезно, когда распаковываете не от root).
tar -psudo tar -xpf system.tar -C /Восстановить права доступа (нужен root).

Сжатие и распаковка отдельных файлов

КомандаВариантЧто делает
gzipgzip data.sqlСжимает и удаляет исходный файл (получится data.sql.gz).
gzip -kgzip -k data.sqlСжимает, оставляя исходный файл.
gzip -9gzip -9 -k data.sqlМаксимальная степень сжатия.
gzip -lgzip -l data.sql.gzСколько места экономит сжатие.
gzip -tgzip -t data.sql.gzПроверка целостности, без распаковки.
gunzipgunzip data.sql.gzРаспаковывает и удаляет архив.
gunzip -kgunzip -k data.sql.gzРаспаковывает, оставляя .gz.
zcatzcat data.sql.gz | headЧитает сжатый файл, не распаковывая на диск.
gzip -cmysqldump db | gzip -c > db.sql.gzСжатие потока данных через пайп.
bzip2 / bunzip2bzip2 -k file ; bunzip2 -k file.bz2Сжатие и распаковка bzip2.
xz / unxzxz -9 -k file ; unxz -k file.xzСжатие и распаковка xz.
xz -T0tar -cf - data | xz -T0 > data.tar.xzМногопоточное сжатие xz (T0 — все ядра).

zip и 7z

КомандаВариантЧто делает
zip -rzip -r archive.zip ./dirРекурсивный архив zip.
zip -ezip -er secret.zip ./dirАрхив с паролем (запросит пароль).
zip -dzip -d archive.zip old.txtУдалить файл из архива.
zip -uzip -ur archive.zip ./dirОбновить только изменившиеся файлы.
zip -xzip -r a.zip ./dir -x "*.log"Исключить шаблон.
unzip -lunzip -l archive.zipСписок содержимого.
unzip -dunzip archive.zip -d /opt/appРаспаковать в папку.
unzip -ounzip -o archive.zipПерезаписывать без вопроса.
unzip -tunzip -t archive.zipПроверка целостности.
7z a7z a archive.7z ./dirСоздать архив 7z (пакет p7zip-full).
7z x7z x archive.7z -o/opt/appРаспаковать с сохранением структуры в указанную папку.
7z l7z l archive.7zСписок содержимого.
7z -p7z 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 -. Так работают даже имена с пробелами и переносами строк.