15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
08.10.2024

Як розпакувати файли .tar.gz за допомогою командного рядка Linux

Файл .tar.gz — це стиснутий архів, створений шляхом поєднання двох окремих операцій: tar (Tape Archive), який об’єднує кілька файлів і каталогів в один архів, та gzip, який стискає цей архів для зменшення його розміру. Результатом є портативний, компактний формат пакування, що є де-факто стандартом для розповсюдження програмного забезпечення, наборів конфігурацій і системних резервних копій практично в кожному середовищі Linux та Unix-подібних систем.

Канонічна команда для розпакування архіву .tar.gz — `tar -xzvf archive-name.tar.gz`. Розуміння того, що робить кожен прапор — і коли відхилятися від цього стандарту — відрізняє компетентного системного адміністратора від того, хто сліпо копіює команди з інтернету.

Розуміння формату .tar.gz

Перш ніж виконувати будь-яку команду, корисно зрозуміти, з чим саме ви маєте справу. Формат `.tar.gz` (також записується як `.tgz`) — це двоетапний процес:

  1. `tar` збирає файли, зберігає структуру каталогів, права доступу, власника та символічні посилання в один плаский файл.
  2. `gzip` стискає цей плаский файл за допомогою алгоритму DEFLATE, зазвичай досягаючи зменшення розміру на 60–70% для текстового вмісту.

Ця двоетапна архітектура пояснює, чому прапори `-z` (gzip) та `-x` (розпакування) обидва є обов’язковими. Жоден інструмент окремо не виконує повне завдання. У сучасних системах Linux `tar` достатньо розумний, щоб автоматично визначати тип стиснення через `–auto-compress` або просто зчитуючи магічні байти файлу, але явне зазначення прапорів завжди є безпечнішою практикою у скриптах і конвеєрах автоматизації.

Основний синтаксис і довідник прапорів

“`bash

tar -xzvf archive-name.tar.gz

“`

ПрапорПовна формаФункція
—————–———-
`-x``–extract`Розпакувати файли з архіву
`-z``–gzip`Пропустити архів через декомпресію gzip
`-v``–verbose`Виводити кожне ім’я файлу під час обробки
`-f``–file=ARCHIVE`Вказати ім’я файлу архіву (має безпосередньо передувати імені файлу)
`-C``–directory=DIR`Розпакувати у вказаний цільовий каталог
`-t``–list`Переглянути вміст архіву без розпакування
`-p``–preserve-permissions`Відновити оригінальні права доступу до файлів точно
`–strip-components=N`Видалити N початкових компонентів шляху з імен файлів

Важлива деталь: Прапор `-f` завжди має бути останнім прапором перед іменем файлу. Написання `tar -xvzf` та `tar -xzvf` є обидва допустимими, але `tar -fxzv archive.tar.gz` не спрацює, оскільки `-f` очікує, що наступним аргументом буде шлях до архіву.

Покроковий посібник з розпакування

1. Відкрийте термінал

У більшості настільних дистрибутивів Linux натисніть `Ctrl + Alt + T`. На безголовому сервері, до якого ви підключилися через SSH, ви вже перебуваєте у сеансі терміналу.

2. Знайдіть свій архів

“`bash

ls -lh /path/to/directory

“`

Переконайтеся, що файл існує, і зверніть увагу на його розмір. Прапор `-h` відображає розміри у зручному для читання форматі (KB, MB, GB).

3. Розпакування на місці

Перейдіть до каталогу, що містить архів, а потім розпакуйте його:

“`bash

cd /path/to/directory

tar -xzvf archive-name.tar.gz

“`

Розпаковані файли з’являться у поточному робочому каталозі, зазвичай всередині підкаталогу, що відображає внутрішню структуру архіву.

4. Розпакування у вказаний каталог

Використовуйте прапор `-C` для перенаправлення виводу до будь-якого цільового шляху. Якщо каталог призначення не існує, спочатку створіть його:

“`bash

mkdir -p /opt/myapp

tar -xzvf archive-name.tar.gz -C /opt/myapp

“`

Прапор `-p` для `mkdir` запобігає помилкам, якщо каталог вже існує — корисна звичка у скриптах.

Приклад — розгортання архіву вебзастосунку:

“`bash

mkdir -p ~/deployments/webapp-v2

tar -xzvf webapp-v2.tar.gz -C ~/deployments/webapp-v2

“`

5. Розпакування без детального виводу

В автоматизованих скриптах, завданнях cron або конвеєрах CI/CD детальний вивід створює шум у журналах. Видаліть прапор `-v`:

“`bash

tar -xzf archive-name.tar.gz -C /opt/myapp

“`

Це бажана форма у виробничій автоматизації. Детальний режим корисний в інтерактивному режимі, коли потрібно підтвердити, які файли записуються.

Перегляд вмісту архіву без розпакування

Перш ніж розпаковувати незнайомий архів — особливо завантажений із зовнішнього джерела — завжди спочатку перевіряйте його вміст. Деякі архіви містять файли з абсолютними шляхами або без каталогу верхнього рівня, що може несподівано розкидати файли по всій файловій системі.

“`bash

tar -tzvf archive-name.tar.gz

“`

Якщо вивід показує шляхи, що починаються з `/` або `..`, розпаковуйте з обережністю або використовуйте `–strip-components` для очищення шляхів.

Щоб перевірити наявність обгортки каталогу верхнього рівня:

“`bash

tar -tzf archive-name.tar.gz | head -20

“`

Якщо всі шляхи мають спільний префікс (наприклад, `myapp-1.0/`), розпакування є чистим. Якщо ні — створіть окремий каталог і розпакуйте в нього за допомогою `-C`.

Робота з видаленням компонентів шляху

Поширений реальний сценарій: ви завантажуєте вихідний тарбол з GitHub, який загортає все всередині `project-main/`, але ви хочете, щоб вміст знаходився безпосередньо в `/opt/project/` без цього додаткового рівня вкладеності.

“`bash

tar -xzvf project-main.tar.gz -C /opt/project –strip-components=1

“`

`–strip-components=1` видаляє перший сегмент шляху з кожного розпакованого файлу, фактично «розгортаючи» каталог верхнього рівня. Це широко використовується у скриптах розгортання та Dockerfile.

Розпакування окремого файлу або каталогу з архіву

Не завжди потрібно розпаковувати все. Щоб витягти конкретний файл:

“`bash

tar -xzvf archive-name.tar.gz path/to/specific-file.conf

“`

Щоб розпакувати конкретний каталог з усім його вмістом:

“`bash

tar -xzvf archive-name.tar.gz path/to/specific-directory/

“`

Шлях має точно збігатися з тим, що повідомляє `tar -tzf`. Ця техніка є безцінною при відновленні одного файлу конфігурації з великого архіву резервної копії без розпакування гігабайтів даних.

Розпакування файлів .tar без стиснення gzip

Звичайний файл `.tar` не має шару стиснення. Повністю видаліть прапор `-z`:

“`bash

tar -xvf archive-name.tar

“`

Порівняння: .tar.gz та інші поширені формати архівів

ФорматРозширенняАлгоритм стисненняСтупінь стисненняШвидкістьПотрібен Tar
——–———–———————–——————-——-————–
Gzip тарбол`.tar.gz` / `.tgz`DEFLATE (gzip)ПомірнийШвидкаТак
Bzip2 тарбол`.tar.bz2`Burrows-Wheeler (bzip2)ВисокийПовільнаТак
XZ тарбол`.tar.xz`LZMA2 (xz)Дуже високийДуже повільнаТак
Zstandard тарбол`.tar.zst`ZstandardВисокийДуже швидкаТак
ZIP архів`.zip`DEFLATEПомірнийШвидкаНі
Звичайний tar`.tar`НемаєНемаєНайшвидшаТак

Ключовий висновок: `.tar.xz` наразі є бажаним форматом для пакетів дистрибутивів Linux (вихідний код ядра, вихідні тарболи RPM/DEB) завдяки своєму чудовому ступеню стиснення. Однак `.tar.gz` залишається домінуючим для загального розповсюдження завдяки універсальній підтримці інструментарію та швидкості розпакування. `.tar.zst` (Zstandard) набирає популярності в сучасних дистрибутивах, таких як Arch Linux, завдяки виключному балансу між ступенем стиснення та швидкістю.

Щоб розпакувати ці альтернативні формати, замініть `-z` відповідним прапором:

“`bash

tar -xjvf archive.tar.bz2 # bzip2

tar -xJvf archive.tar.xz # xz/lzma

tar -x –zstd -vf archive.tar.zst # zstandard (GNU tar 1.31+)

“`

Збереження прав доступу до файлів та власника

При розпакуванні архівів, що містять системні файли, скрипти або бінарні файли застосунків, збереження прав доступу має значення:

“`bash

tar -xzvpf archive-name.tar.gz

“`

Прапор `-p` вказує tar відновлювати оригінальні права доступу. Без нього застосовується umask поточного користувача, що може непомітно порушити виконувані скрипти або бінарні файли з setuid.

Щоб зберегти власника (потрібні права root):

“`bash

sudo tar -xzvpf archive-name.tar.gz –same-owner

“`

Це критично важливо при відновленні системних резервних копій або розгортанні пакетів застосунків, які покладаються на конкретного власника користувача/групи для меж безпеки.

Поширені помилки та способи їх усунення

`tar: Error is not recoverable: exiting now`

Архів пошкоджений або завантаження було неповним. Перевірте цілісність файлу за допомогою `md5sum` або `sha256sum` відносно опублікованої контрольної суми, а потім завантажте знову.

`tar: Skipping to next header` / `tar: Archive contains obsolescent base-64 headers`

Часткове пошкодження всередині архіву. Ви можете спробувати часткове розпакування за допомогою `–ignore-zeros`, але ставтеся до виводу як до потенційно неповного.

`gzip: stdin: not in gzip format`

Файл має розширення `.tar.gz`, але насправді не є стиснутим gzip. Запустіть `file archive-name.tar.gz` для визначення реального формату. Це може бути звичайний `.tar`, `.zip` або файл `.bz2` з неправильним розширенням.

`Cannot open: No such file or directory`

Або шлях неправильний, або ім’я файлу містить пробіл. Візьміть ім’я файлу в лапки: `tar -xzvf "my archive.tar.gz"`.

Відмова у доступі під час розпакування

У вас немає прав на запис до цільового каталогу. Або використовуйте `sudo`, або змініть ціль за допомогою `-C` на каталог, яким ви володієте.

Практичні випадки використання на VPS або виділеному сервері

У середовищі VPS Хостингу архіви `.tar.gz` з’являються постійно: розгортання релізів застосунків, відновлення дампів баз даних, передача наборів конфігурацій між серверами та розпакування програмного забезпечення, скомпільованого з вихідного коду.

Типовий робочий процес розгортання на сервері Linux:

“`bash

Download release archive

wget https://example.com/releases/myapp-2.1.0.tar.gz

Verify integrity

sha256sum myapp-2.1.0.tar.gz

Inspect contents before extracting

tar -tzf myapp-2.1.0.tar.gz | head -30

Extract to deployment directory

sudo mkdir -p /var/www/myapp

sudo tar -xzvpf myapp-2.1.0.tar.gz -C /var/www/myapp –strip-components=1

Set correct ownership

sudo chown -R www-data:www-data /var/www/myapp

“`

На Виділених серверах, що обробляють великомасштабні резервні копії, поєднання `tar` з конвеєрами дозволяє уникнути запису проміжних файлів на диск повністю:

“`bash

Create and stream a compressed archive directly over SSH to a remote server

tar -czvf – /var/www/html | ssh user@backup-server "cat > /backups/html-$(date +%F).tar.gz"

“`

Цей підхід особливо ефективний, коли місце на диску обмежене або коли швидкість резервного копіювання є критичною.

Якщо ви керуєте середовищем вебхостингу через панель керування, такі інструменти, як VPS з cPanel, надають доступ до операцій `.tar.gz` через інтерфейс Файлового менеджера, але базова команда `tar` завжди доступна в терміналі для скриптових робочих процесів.

При хостингу застосунків, що обслуговують файли через HTTPS, поєднання конвеєра розгортання з правильно налаштованими SSL Сертифікатами гарантує, що активи застосунку, які ви розпаковуєте та розгортаєте, обслуговуються безпечно з першого запиту.

Для команд, що керують кількома середовищами, Панелі керування VPS можуть спростити заплановані операції резервного копіювання та відновлення, які значною мірою покладаються на архіви `.tar.gz`.

Короткий довідник: найбільш використовувані команди tar

“`bash

Extract .tar.gz to current directory

tar -xzvf archive.tar.gz

Extract to specific directory

tar -xzvf archive.tar.gz -C /target/dir

Extract silently (no verbose output)

tar -xzf archive.tar.gz -C /target/dir

List contents without extracting

tar -tzvf archive.tar.gz

Extract single file

tar -xzvf archive.tar.gz path/inside/archive/file.conf

Extract and strip top-level directory

tar -xzvf archive.tar.gz -C /target/dir –strip-components=1

Extract preserving permissions and ownership (as root)

sudo tar -xzvpf archive.tar.gz –same-owner

Extract .tar.bz2

tar -xjvf archive.tar.bz2

Extract .tar.xz

tar -xJvf archive.tar.xz

“`

Матриця технічних рішень

СценарійРекомендована команда
———-———————
Інтерактивне розпакування, потрібно бачити прогрес`tar -xzvf archive.tar.gz`
Автоматизований скрипт або завдання cron`tar -xzf archive.tar.gz -C /target`
Невідома структура архіву, спочатку перевірте`tar -tzf archive.tar.gzhead -20`
Розгортання до каталогу без обгортки верхнього рівня`tar -xzf archive.tar.gz -C /target –strip-components=1`
Відновлення системної резервної копії з точними правами доступу`sudo tar -xzvpf archive.tar.gz –same-owner`
Відновлення одного файлу з великого архіву`tar -xzf archive.tar.gz path/to/file`
Перевірка цілісності архіву перед розпакуванням`tar -tzf archive.tar.gz > /dev/null && echo "OK"`

FAQ

У чому різниця між .tar.gz та .tgz?

Це ідентичні формати. `.tgz` — це просто скорочений псевдонім з одним розширенням для `.tar.gz`, який використовується, коли файлові системи або інструменти мають обмеження на довжину розширення. Обидва розпаковуються однією і тією ж командою `tar -xzvf`.

Чому `tar -xzvf` іноді розпаковує файли у поточний каталог замість підкаталогу?

Це відбувається, коли архів був створений без обгортки каталогу верхнього рівня. Завжди запускайте `tar -tzf archive.tar.gz | head -20` перед розпакуванням. Якщо шляхи не мають спільного префіксу, створіть окремий каталог і використовуйте `-C` для розпакування в нього, запобігаючи розкиданню файлів.

Чи можна розпакувати файл .tar.gz без команди tar?

Так. Ви можете спочатку декомпресувати шар gzip за допомогою `gunzip archive.tar.gz`, що дасть `archive.tar`, а потім розпакувати за допомогою `tar -xvf archive.tar`. Деякі системи також підтримують `zcat archive.tar.gz | tar -xvf -` для передачі декомпресії безпосередньо в tar. Однак `tar -xzvf` однією командою завжди є найефективнішим підходом.

Чи сповільнює прапор `-v` розпакування великих архівів?

Незначно, так. В архівах, що містять сотні тисяч дрібних файлів, накладні витрати на виведення кожного імені файлу в stdout можуть додати відчутний час. У чутливих до продуктивності або автоматизованих контекстах завжди опускайте `-v`.

Як розпакувати файл .tar.gz від імені іншого користувача без зміни облікового запису?

Використовуйте `sudo -u targetuser tar -xzvf archive.tar.gz -C /target/dir`. Це запускає процес розпакування під ідентифікатором цільового користувача, забезпечуючи правильне призначення власника розпакованих файлів без необхідності повного перемикання користувача через `su`.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати