Как распаковать файл .tar.gz в Linux: полное руководство с продвинутыми советами
Работа со сжатыми файлами — это повседневная реальность в любой среде Linux. Среди наиболее широко используемых форматов — .tar.gz, двухэтапный формат, который объединяет tar для архивирования и gzip для сжатия. Независимо от того, распаковываете ли вы исходный код программного обеспечения, восстанавливаете резервные копии или развертываете файлы конфигурации на сервере VPS Hosting, знание того, как эффективно и безопасно работать с архивами .tar.gz, является фундаментальным навыком Linux.
Это руководство охватывает все: от базовой команды извлечения до продвинутых методов работы с большими архивами, усиления безопасности и лучших практик написания скриптов.
Что такое файл .tar.gz?
Файл .tar.gz — часто называемый tarball — создается в два этапа:
- tar объединяет несколько файлов и директорий в один архив (
.tar) - gzip сжимает этот архив, чтобы уменьшить его размер (
.tar.gzили.tgz)
Распространенные варианты использования
- Распространение исходного кода программного обеспечения
- Упаковка файлов конфигурации и резервных копий
- Архивирование файлов логов для долгосрочного хранения
- Передача больших деревьев директорий между серверами
Пример имени файла: project-files.tar.gz
Базовая команда извлечения
Стандартная команда для извлечения файла .tar.gz:
tar -xvzf file.tar.gzРазбор флагов
| Флаг | Значение |
|---|---|
-x | Извлечь файлы из архива |
-v | Режим подробного вывода — выводит каждый файл при извлечении |
-z | Распаковать с использованием gzip |
-f | Указывает имя файла для работы |
Эта единственная команда справляется с подавляющим большинством повседневных задач извлечения.
Извлечение в определенную директорию
По умолчанию tar извлекает файлы в текущую рабочую директорию. Чтобы перенаправить вывод в определенное место, используйте флаг -C:
tar -xvzf file.tar.gz -C /path/to/target-directory> Примечание: Целевая директория должна уже существовать. Создайте ее сначала с помощью mkdir -p /path/to/target-directory при необходимости.
Этот подход особенно полезен в автоматизированных скриптах развертывания или при организации нескольких архивов на производственном сервере.
Просмотр содержимого архива перед извлечением
Перед извлечением архива — особенно из незнакомого источника — хорошей практикой является предварительная проверка его содержимого:
tar -tvzf file.tar.gzФлаг -t выводит список всех файлов и директорий внутри архива без извлечения. Это помогает вам:
- Понять внутреннюю структуру директорий
- Избежать случайного перезаписи существующих файлов
- Обнаружить подозрительные или неожиданные пути
Извлечение определенных файлов или директорий
Вам не всегда нужно извлекать весь архив. Чтобы извлечь отдельный файл или папку, укажите его путь точно так, как он отображается внутри архива:
tar -xvzf file.tar.gz path/to/specific-file.txtЧтобы найти точный внутренний путь, сначала выполните команду --list:
tar -tvzf file.tar.gz | grep filename> Важно: Используйте относительный путь, показанный в списке архива, а не абсолютный путь, начинающийся с /.
Соображения безопасности при извлечении ненадежных архивов
Извлечение файлов .tar.gz из неизвестных или ненадежных источников может представлять серьезные риски безопасности, включая атаки обхода пути, при которых вредоносные архивы перезаписывают критические системные файлы. Применяйте эти защиты:
Предотвращение перезаписи директорий
tar --no-overwrite-dir -xvzf file.tar.gzУдаление ведущих компонентов пути
Флаг --strip-components удаляет ведущие уровни директорий из извлеченных путей, что нейтрализует попытки внедрения абсолютного пути:
tar --strip-components=1 -xvzf untrusted-archive.tar.gzИзвлечение в изолированную директорию
Всегда извлекайте ненадежные архивы в выделенную директорию-песочницу и проверяйте содержимое перед перемещением файлов в их окончательное место назначения:
mkdir /tmp/sandbox && tar -xvzf untrusted-archive.tar.gz -C /tmp/sandboxЭти практики особенно критичны на общей инфраструктуре. Если вы управляете несколькими сайтами или клиентами, рассмотрите использование сред Shared Web Hosting со строгими границами разрешений.
Эффективная работа с большими архивами
Для архивов размером в несколько гигабайт стандартное извлечение может казаться черным ящиком. Эти методы улучшают видимость и производительность.
Мониторинг прогресса с pv
pv (pipe viewer) отображает полосу прогресса в реальном времени и скорость передачи:
pv file.tar.gz | tar xzvf -Установите pv, если он еще не доступен:
# Debian/Ubuntu
sudo apt install pv
# CentOS/RHEL/AlmaLinux
sudo dnf install pvОтключение режима подробного вывода для более быстрого извлечения
При извлечении очень больших архивов флаг -v может замедлить процесс, выводя тысячи имен файлов в терминал. Удалите его для лучшей производительности:
tar -xzf file.tar.gzИспользование параллельной распаковки с pigz
Для многоядерных серверов pigz заменяет gzip параллельной реализацией и может значительно сократить время распаковки:
tar -I pigz -xf file.tar.gzРаспаковка в два отдельных этапа
Иногда вам нужен более точный контроль — например, при интеграции в конвейер или проверке промежуточного файла .tar перед распаковкой. Вы можете разделить процесс на две команды:
# Step 1: Decompress gzip to get a plain .tar archive
gunzip file.tar.gz
# Step 2: Extract the .tar archive
tar -xvf file.tarЭтот подход полезен, когда:
- Вы хотите проверить сырой файл
.tarперед извлечением - Ваш конвейер обрабатывает этапы
.tarи.gzотдельно - Вам нужно передать файл
.tarдругому инструменту
Создание архива .tar.gz
Знание того, как создавать архивы, так же важно, как их извлечение. Синтаксис зеркален извлечению, но использует -c (создать) вместо -x:
tar -czvf archive-name.tar.gz /path/to/directory/Исключение определенных файлов или директорий
tar -czvf archive.tar.gz /path/to/directory/ --exclude='*.log' --exclude='node_modules'Это бесценно для создания чистых пакетов развертывания или резервных копий без ненужного балласта.
Автоматизация операций .tar.gz в скриптах
На производственных серверах — независимо от того, используете ли вы Dedicated Server или управляемый VPS — автоматизация операций с архивами экономит время и снижает человеческие ошибки.
Пример: скрипт автоматического резервного копирования
#!/bin/bash
BACKUP_DIR="/var/backups"
SOURCE_DIR="/var/www/html"
DATE=$(date +%Y-%m-%d)
ARCHIVE="$BACKUP_DIR/website-backup-$DATE.tar.gz"
mkdir -p "$BACKUP_DIR"
tar -czf "$ARCHIVE" --exclude='*.tmp' "$SOURCE_DIR"
echo "Backup created: $ARCHIVE"Запланируйте это с помощью задания cron для полностью автоматизированных ежедневных резервных копий:
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1Использование графических менеджеров архивов (опционально)
Если вы работаете в среде рабочего стола Linux, графические инструменты предоставляют альтернативу перетаскивания:
| Среда рабочего стола | Менеджер архивов |
|---|---|
| GNOME | File Roller |
