Як розпакувати файл .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 | Режим verbose — виводить список кожного файлу під час розпакування |
-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Вимкнення режиму verbose для швидшого розпакування
При розпакуванні дуже великих архівів прапорець -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 (create) замість -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