15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
31.07.2025

Как распаковать файл Tar в Linux: продвинутое руководство для опытных пользователей

Извлечение .tar, .tar.gz, .tar.bz2 и других форматов tarball — это фундаментальный навык в администрировании систем Linux, конвейерах DevOps и управлении серверами. Хотя команда tar выглядит простой на первый взгляд, опытные администраторы могут использовать её расширенные флаги, интеграцию со скриптами и обработку граничных случаев для достижения хирургической точности при работе с архивами.

Это подробное руководство охватывает всё — от базовой распаковки до условного извлечения, проверки целостности, тестирования производительности и автоматизации рабочих процессов — всё, что нужно опытному пользователю для овладения tar на Linux.

Что такое файл .tar?

Файл .tar — сокращение от Tape Archive — это консолидированный формат архива, который объединяет несколько файлов и каталогов в один файл, сохраняя:

  • Структуру каталогов
  • Разрешения файлов
  • Метаданные владельца
  • Временные метки

По умолчанию архивы .tar не сжимаются. Сжатие применяется как дополнительный слой с использованием форматов, таких как .gz, .bz2, .xz или .zst. Такой модульный дизайн даёт администраторам точный контроль над балансом между скоростью и степенью сжатия.

ФорматРасширениеИнструмент сжатия
Без сжатия.tar
Gzip.tar.gz / .tgzgzip
Bzip2.tar.bz2bzip2
XZ.tar.xzxz
Zstandard.tar.zstzstd

Базовые команды извлечения

1. Извлечение файла .tar (без сжатия)

tar -xf archive.tar

2. Извлечение файла .tar.gz или .tgz

tar -xzf archive.tar.gz

3. Извлечение файла .tar.bz2

tar -xjf archive.tar.bz2

4. Извлечение файла .tar.xz

tar -xJf archive.tar.xz

5. Извлечение файла .tar.zst (Zstandard)

tar --use-compress-program=unzstd -xf archive.tar.zst

> Примечание: Zstandard (.zst) предлагает отличное соотношение скорости к сжатию и становится всё более распространённым в современных дистрибутивах Linux и слоях образов контейнеров.

Основные флаги и их функции

Понимание флагов tar необходимо для написания надёжных скриптов и обработки сложных сценариев извлечения. Ниже приведена справочная таблица наиболее важных опций:

ФлагФункция
-xИзвлечение файлов из архива
-fУказание файла архива для использования
-vПодробный вывод — список файлов при их извлечении
-zФильтрация через сжатие gzip
-jФильтрация через сжатие bzip2
-JФильтрация через сжатие xz
-C <dir>Переход в указанный каталог перед извлечением
--strip-components=NУдаление N компонентов пути из имён файлов
--wildcardsВключение сопоставления подстановочных символов при извлечении
--no-same-ownerНе восстанавливать владельца файла (полезно для обычных пользователей)
--overwriteПерезаписывать существующие файлы без подтверждения
--exclude=PATTERNИсключение файлов, соответствующих указанному шаблону
--ignore-zerosПропуск блоков, заполненных нулями (полезно для повреждённых архивов)
-tСписок содержимого архива без извлечения

Примеры продвинутого извлечения

Извлечение в определённый каталог

Направьте извлечённое содержимое в целевой путь, используя флаг -C:

tar -xf archive.tar.gz -C /opt/myapp

> Целевой каталог должен существовать перед запуском этой команды. Используйте mkdir -p /opt/myapp при необходимости.

Выравнивание структуры архива (удаление папки верхнего уровня)

Когда архив содержит всё внутри одного каталога верхнего уровня, используйте --strip-components для его удаления:

tar -xf archive.tar.gz --strip-components=1

Это особенно полезно при развёртывании приложений непосредственно в целевой каталог без промежуточного слоя папки.

Извлечение только определённых файлов

Вы можете извлечь отдельные файлы, указав их пути так, как они отображаются внутри архива:

tar -xf archive.tar.gz path/to/file1 path/to/file2

Извлечение файлов, соответствующих подстановочному шаблону

Используйте --wildcards для фильтрации извлечения по шаблону:

tar -xf archive.tar.gz --wildcards '*.conf'

Это извлекает только файлы конфигурации .conf из архива — идеально для выборочного восстановления конфигурации без затрагивания других данных.

Исключение файлов при извлечении

Исключите определённые файлы или шаблоны из извлечения:

tar -xf archive.tar.gz --exclude='*.log'

Вы можете объединить несколько флагов --exclude для фильтрации нескольких шаблонов одновременно.

Тестирование времени извлечения

Используйте утилиту time для измерения времени извлечения — полезно при сравнении форматов сжатия или оптимизации рабочих процессов резервного копирования:

time tar -xf archive.tar.gz

Обработка граничных случаев

🧱 Работа с повреждённными архивами

Если архив частично повреждён — например, из-за прерванной загрузки или ошибки диска — используйте --ignore-zeros для пропуска повреждённых блоков, заполненных нулями, и восстановления как можно большего количества данных:

tar -xzf broken.tar.gz --ignore-zeros

Этот флаг указывает tar продолжить обработку даже при обнаружении неожиданного EOF или нулевых блоков, максимизируя восстановление данных.

🔍 Предпросмотр содержимого архива перед извлечением

Всегда проверяйте архив перед его извлечением, особенно при работе с ненадёжными источниками или в производственных средах:

tar -tf archive.tar.gz

Это выводит список всех файлов внутри архива без записи чего-либо на диск.

✅ Проверка целостности для архивов, сжатых с помощью Gzip

Проверьте, что архив .tar.gz не повреждён перед попыткой извлечения:

gzip -t archive.tar.gz && echo "Archive integrity OK"

Для архивов .tar.xz:

xz --test archive.tar.xz && echo "Archive integrity OK"

Включение проверок целостности в автоматизированные скрипты предотвращает неудачные развёртывания, вызванные повреждёнными файлами резервных копий.

Советы по написанию скриптов для системных администраторов

Интеграция tar в shell-скрипты — один из наиболее мощных способов автоматизации резервного копирования, развёртывания и восстановления рабочих процессов на серверах Linux.

Скрипт автоматического резервного копирования

#!/bin/bash
TARGET_DIR="/var/www"
ARCHIVE="/backups/site-$(date +%F).tar.gz"

tar -czf "$ARCHIVE" -C "$TARGET_DIR" . && echo "Backup saved to $ARCHIVE"

Этот скрипт создаёт архив с меткой даты вашего корневого веб-каталога. Объедините его с заданием cron для полностью автоматизированного ежедневного резервного копирования.

Скрипт автоматической распаковки и развёртывания

#!/bin/bash
SRC="$1"
DEST="$2"

mkdir -p "$DEST"
tar -xzf "$SRC" -C "$DEST" --strip-components=1

Передайте путь архива и целевой каталог в качестве аргументов. Флаг --strip-components=1 гарантирует удаление каталога верхнего уровня,

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать