15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar
08.10.2024

Como Extrair Arquivos .tar.gz Usando a Linha de Comando do Linux

Um ficheiro .tar.gz é um arquivo comprimido criado pela combinação de duas operações distintas: tar (Tape Archive), que agrupa múltiplos ficheiros e diretórios num único arquivo, e gzip, que comprime esse arquivo para reduzir o seu tamanho. O resultado é um formato de pacote portátil e eficiente em termos de espaço, que é o padrão de facto para distribuição de software, pacotes de configuração e cópias de segurança do sistema em praticamente todos os ambientes Linux e Unix.

O comando canónico para extrair um arquivo .tar.gz é `tar -xzvf archive-name.tar.gz`. Compreender o que cada flag faz — e quando desviar deste padrão — é o que distingue um sysadmin competente de alguém que cola comandos da internet sem pensar.

Compreender o Formato .tar.gz

Antes de executar qualquer comando, é útil compreender com o que está realmente a lidar. O formato `.tar.gz` (também escrito como `.tgz`) é um processo de duas etapas:

  1. `tar` recolhe ficheiros, preserva a estrutura de diretórios, permissões, propriedade e ligações simbólicas num único ficheiro plano.
  2. `gzip` comprime esse ficheiro plano usando o algoritmo DEFLATE, atingindo tipicamente uma redução de tamanho de 60–70% em conteúdo com muito texto.

Esta arquitetura de duas etapas é a razão pela qual as flags `-z` (gzip) e `-x` (extrair) são ambas necessárias. Nenhuma ferramenta sozinha trata do trabalho completo. Nos sistemas Linux modernos, `tar` é suficientemente inteligente para detetar automaticamente o tipo de compressão via `–auto-compress` ou simplesmente lendo os bytes mágicos do ficheiro, mas ser explícito com as flags é sempre a prática mais segura em scripts e pipelines de automação.

Sintaxe Principal e Referência de Flags

“`bash

tar -xzvf archive-name.tar.gz

“`

FlagForma LongaFunção
—————–———-
`-x``–extract`Extrair ficheiros do arquivo
`-z``–gzip`Filtrar o arquivo através da descompressão gzip
`-v``–verbose`Imprimir cada nome de ficheiro à medida que é processado
`-f``–file=ARCHIVE`Especificar o nome do ficheiro de arquivo (deve preceder imediatamente o nome do ficheiro)
`-C``–directory=DIR`Extrair para um diretório de destino específico
`-t``–list`Listar o conteúdo do arquivo sem extrair
`-p``–preserve-permissions`Restaurar as permissões originais dos ficheiros com exatidão
`–strip-components=N`Remover N componentes de caminho iniciais dos nomes de ficheiros

Detalhe crítico: A flag `-f` deve ser sempre a última flag antes do nome do ficheiro. Escrever `tar -xvzf` e `tar -xzvf` são ambos válidos, mas `tar -fxzv archive.tar.gz` falhará porque `-f` espera que o argumento imediatamente seguinte seja o caminho do arquivo.

Guia de Extração Passo a Passo

1. Abrir um Terminal

Na maioria das distribuições Linux de ambiente de trabalho, prima `Ctrl + Alt + T`. Num servidor sem interface gráfica acedido via SSH, já se encontra numa sessão de terminal.

2. Localizar o Arquivo

“`bash

ls -lh /path/to/directory

“`

Confirme que o ficheiro existe e anote o seu tamanho. A flag `-h` apresenta os tamanhos num formato legível por humanos (KB, MB, GB).

3. Extrair no Local

Navegue até ao diretório que contém o arquivo e depois extraia:

“`bash

cd /path/to/directory

tar -xzvf archive-name.tar.gz

“`

Os ficheiros extraídos aparecerão no diretório de trabalho atual, tipicamente dentro de um subdiretório que espelha a estrutura interna do arquivo.

4. Extrair para um Diretório Específico

Use a flag `-C` para redirecionar a saída para qualquer caminho de destino. Se o destino não existir, crie-o primeiro:

“`bash

mkdir -p /opt/myapp

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

“`

A flag `-p` no `mkdir` evita erros se o diretório já existir — um bom hábito em scripts.

Exemplo — implementar um arquivo de aplicação web:

“`bash

mkdir -p ~/deployments/webapp-v2

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

“`

5. Extrair Sem Saída Detalhada

Em scripts automatizados, tarefas cron ou pipelines CI/CD, a saída detalhada cria ruído nos registos. Remova a flag `-v`:

“`bash

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

“`

Esta é a forma preferida em automação de produção. O modo detalhado é útil de forma interativa quando precisa de confirmar quais os ficheiros que estão a ser escritos.

Listar o Conteúdo do Arquivo Sem Extrair

Antes de extrair um arquivo desconhecido — especialmente um descarregado de uma fonte externa — inspecione sempre o seu conteúdo primeiro. Alguns arquivos contêm ficheiros com caminhos absolutos ou sem diretório de nível superior, o que pode dispersar ficheiros pelo seu sistema de ficheiros de forma inesperada.

“`bash

tar -tzvf archive-name.tar.gz

“`

Se a saída mostrar caminhos começando com `/` ou `..`, extraia com cuidado ou use `–strip-components` para sanitizar os caminhos.

Para verificar se existe um diretório de nível superior:

“`bash

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

“`

Se todos os caminhos partilharem um prefixo comum (por exemplo, `myapp-1.0/`), a extração é limpa. Caso contrário, crie um diretório dedicado e extraia para ele com `-C`.

Lidar com Strip Components

Um cenário comum no mundo real: descarrega um tarball de código-fonte do GitHub que envolve tudo dentro de `project-main/`, mas quer o conteúdo diretamente em `/opt/project/` sem essa camada de aninhamento extra.

“`bash

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

“`

`–strip-components=1` remove o primeiro segmento de caminho de cada ficheiro extraído, efetivamente "desembrulhando" o diretório de nível superior. Isto é amplamente utilizado em scripts de implementação e Dockerfiles.

Extrair um Único Ficheiro ou Diretório de um Arquivo

Nem sempre é necessário extrair tudo. Para obter um ficheiro específico:

“`bash

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

“`

Para extrair um diretório específico e todo o seu conteúdo:

“`bash

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

“`

O caminho deve corresponder exatamente ao que `tar -tzf` reporta. Esta técnica é inestimável quando se pretende recuperar um único ficheiro de configuração de um grande arquivo de cópia de segurança sem descompactar gigabytes de dados.

Extrair Ficheiros .tar Sem Compressão gzip

Um ficheiro `.tar` simples não tem camada de compressão. Remova completamente a flag `-z`:

“`bash

tar -xvf archive-name.tar

“`

Comparação: .tar.gz vs. Outros Formatos de Arquivo Comuns

FormatoExtensãoAlgoritmo de CompressãoRácio de CompressãoVelocidadeTar Necessário
——–———–———————–——————-——-————–
Tarball Gzip`.tar.gz` / `.tgz`DEFLATE (gzip)ModeradoRápidoSim
Tarball Bzip2`.tar.bz2`Burrows-Wheeler (bzip2)AltoLentoSim
Tarball XZ`.tar.xz`LZMA2 (xz)Muito AltoMuito LentoSim
Tarball Zstandard`.tar.zst`ZstandardAltoMuito RápidoSim
Arquivo ZIP`.zip`DEFLATEModeradoRápidoNão
Tar simples`.tar`NenhumNenhumMais RápidoSim

Informação importante: `.tar.xz` é agora o formato preferido para pacotes de distribuições Linux (código-fonte do kernel, tarballs de código-fonte RPM/DEB) devido ao seu superior rácio de compressão. No entanto, `.tar.gz` continua dominante para distribuição de uso geral devido ao suporte universal da cadeia de ferramentas e à velocidade de extração. `.tar.zst` (Zstandard) está a ganhar terreno nas distribuições modernas como o Arch Linux pelo seu excecional equilíbrio entre rácio de compressão e velocidade.

Para extrair estes formatos alternativos, substitua `-z` pela flag apropriada:

“`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+)

“`

Preservar Permissões e Propriedade de Ficheiros

Ao extrair arquivos que contêm ficheiros de sistema, scripts ou binários de aplicações, a preservação de permissões é importante:

“`bash

tar -xzvpf archive-name.tar.gz

“`

A flag `-p` instrui o tar a restaurar as permissões originais. Sem ela, é aplicada a umask do utilizador atual, o que pode silenciosamente quebrar scripts executáveis ou binários setuid.

Para preservar a propriedade (requer root):

“`bash

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

“`

Isto é crítico ao restaurar cópias de segurança do sistema ou ao implementar pacotes de aplicações que dependem de propriedade específica de utilizador/grupo para limites de segurança.

Erros Comuns e Como Corrigi-los

`tar: Error is not recoverable: exiting now`

O arquivo está corrompido ou o descarregamento foi incompleto. Verifique a integridade do ficheiro com `md5sum` ou `sha256sum` em relação ao checksum publicado e, em seguida, descarregue novamente.

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

Corrupção parcial dentro do arquivo. Pode tentar uma extração parcial com `–ignore-zeros`, mas trate a saída como potencialmente incompleta.

`gzip: stdin: not in gzip format`

O ficheiro tem uma extensão `.tar.gz` mas não está realmente comprimido com gzip. Execute `file archive-name.tar.gz` para identificar o formato real. Pode ser um `.tar` simples, um `.zip`, ou um ficheiro `.bz2` com uma extensão errada.

`Cannot open: No such file or directory`

O caminho está errado ou o nome do ficheiro tem um espaço. Coloque o nome do ficheiro entre aspas: `tar -xzvf "my archive.tar.gz"`.

Permissão negada durante a extração

Não tem acesso de escrita ao diretório de destino. Use `sudo` ou altere o destino com `-C` para um diretório que lhe pertença.

Casos de Uso Práticos num VPS ou Servidor Dedicado

Num ambiente de Alojamento VPS, os arquivos `.tar.gz` aparecem constantemente: implementação de versões de aplicações, restauração de dumps de bases de dados, transferência de pacotes de configuração entre servidores e descompactação de software compilado a partir do código-fonte.

Um fluxo de trabalho típico de implementação num servidor 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

“`

Em Servidores Dedicados que gerem cópias de segurança em grande escala, combinar `tar` com pipes evita completamente a escrita de ficheiros intermédios no disco:

“`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"

“`

Este padrão é especialmente eficiente quando o espaço em disco é limitado ou quando a velocidade de cópia de segurança é crítica.

Se gerir um ambiente de alojamento web através de um painel de controlo, ferramentas como VPS com cPanel expõem operações `.tar.gz` através da interface do Gestor de Ficheiros, mas o comando `tar` subjacente está sempre disponível no terminal para fluxos de trabalho com scripts.

Ao alojar aplicações que servem ficheiros via HTTPS, combinar o seu pipeline de implementação com Certificados SSL devidamente configurados garante que os recursos da aplicação que extrai e implementa são servidos de forma segura desde o primeiro pedido.

Para equipas que gerem múltiplos ambientes, os Painéis de Controlo VPS podem simplificar as operações de cópia de segurança e restauro agendadas que dependem fortemente de arquivos `.tar.gz`.

Referência Rápida: Comandos tar Mais Utilizados

“`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

“`

Matriz de Decisão Técnica

CenárioComando Recomendado
———-———————
Extração interativa, necessidade de ver o progresso`tar -xzvf archive.tar.gz`
Script automatizado ou tarefa cron`tar -xzf archive.tar.gz -C /target`
Estrutura de arquivo desconhecida, inspecionar primeiro`tar -tzf archive.tar.gzhead -20`
Implementar em diretório sem wrapper de nível superior`tar -xzf archive.tar.gz -C /target –strip-components=1`
Restaurar cópia de segurança do sistema com permissões exatas`sudo tar -xzvpf archive.tar.gz –same-owner`
Recuperar um único ficheiro de um arquivo grande`tar -xzf archive.tar.gz path/to/file`
Verificar a integridade do arquivo antes de extrair`tar -tzf archive.tar.gz > /dev/null && echo "OK"`

FAQ

Qual é a diferença entre .tar.gz e .tgz?

São formatos idênticos. `.tgz` é simplesmente um alias de extensão única abreviado para `.tar.gz`, utilizado quando os sistemas de ficheiros ou ferramentas têm limitações no comprimento das extensões. Ambos são extraídos com o mesmo comando `tar -xzvf`.

Por que é que `tar -xzvf` por vezes extrai ficheiros para o diretório atual em vez de um subdiretório?

Isto acontece quando o arquivo foi criado sem um wrapper de diretório de nível superior. Execute sempre `tar -tzf archive.tar.gz | head -20` antes de extrair. Se os caminhos não partilharem um prefixo comum, crie um diretório dedicado e use `-C` para extrair para ele, evitando a dispersão de ficheiros.

Posso extrair um ficheiro .tar.gz sem o comando tar?

Sim. Pode descomprimir primeiro a camada gzip com `gunzip archive.tar.gz`, que produz `archive.tar`, e depois extrair com `tar -xvf archive.tar`. Alguns sistemas também suportam `zcat archive.tar.gz | tar -xvf -` para encaminhar a descompressão diretamente para o tar. No entanto, `tar -xzvf` num único comando é sempre a abordagem mais eficiente.

A flag `-v` abranda a extração em arquivos grandes?

Marginalmente, sim. Em arquivos que contêm centenas de milhares de ficheiros pequenos, a sobrecarga de imprimir cada nome de ficheiro para stdout pode acrescentar tempo mensurável. Em contextos sensíveis ao desempenho ou automatizados, omita sempre `-v`.

Como extraio um ficheiro .tar.gz como um utilizador diferente sem mudar de conta?

Use `sudo -u targetuser tar -xzvf archive.tar.gz -C /target/dir`. Isto executa o processo de extração sob a identidade do utilizador de destino, garantindo que os ficheiros extraídos têm a propriedade correta sem necessitar de uma mudança completa de utilizador via `su`.

15%

Poupe 15% em todos os serviços

Teste as suas habilidades e obtenha Desconto em qualquer plano

Utilizar o código:

Skills
Começar a trabalhar