15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
08.10.2024

Cómo extraer archivos .tar.gz usando la línea de comandos de Linux

Un archivo .tar.gz es un archivo comprimido creado mediante la combinación de dos operaciones distintas: tar (Tape Archive), que agrupa múltiples archivos y directorios en un único archivo, y gzip, que comprime ese archivo para reducir su tamaño. El resultado es un formato de paquete portátil y eficiente en espacio que es el estándar de facto para distribuir software, paquetes de configuración y copias de seguridad del sistema en prácticamente todos los entornos Linux y similares a Unix.

El comando canónico para extraer un archivo .tar.gz es `tar -xzvf archive-name.tar.gz`. Entender qué hace cada indicador — y cuándo desviarse de este valor predeterminado — es lo que separa a un administrador de sistemas competente de alguien que pega comandos de internet a ciegas.

Comprendiendo el formato .tar.gz

Antes de ejecutar cualquier comando, es útil entender con qué se está tratando realmente. El formato `.tar.gz` (también escrito como `.tgz`) es un proceso de dos etapas:

  1. `tar` recopila archivos, preserva la estructura de directorios, permisos, propiedad y enlaces simbólicos en un único archivo plano.
  2. `gzip` comprime ese archivo plano usando el algoritmo DEFLATE, logrando típicamente una reducción de tamaño del 60–70% en contenido con mucho texto.

Esta arquitectura de dos etapas es la razón por la que los indicadores `-z` (gzip) y `-x` (extraer) son ambos necesarios. Ninguna herramienta por sí sola maneja el trabajo completo. En sistemas Linux modernos, `tar` es lo suficientemente inteligente para detectar automáticamente el tipo de compresión mediante `–auto-compress` o simplemente leyendo los bytes mágicos del archivo, pero ser explícito con los indicadores es siempre la práctica más segura en scripts y canalizaciones de automatización.

Sintaxis principal y referencia de indicadores

“`bash

tar -xzvf archive-name.tar.gz

“`

IndicadorForma largaFunción
—————–———-
`-x``–extract`Extraer archivos del archivo comprimido
`-z``–gzip`Filtrar el archivo a través de la descompresión gzip
`-v``–verbose`Imprimir cada nombre de archivo mientras se procesa
`-f``–file=ARCHIVE`Especificar el nombre del archivo comprimido (debe preceder inmediatamente al nombre del archivo)
`-C``–directory=DIR`Extraer en un directorio de destino específico
`-t``–list`Listar el contenido del archivo sin extraer
`-p``–preserve-permissions`Restaurar los permisos de archivo originales exactamente
`–strip-components=N`Eliminar N componentes de ruta iniciales de los nombres de archivo

Detalle crítico: El indicador `-f` debe ser siempre el último indicador antes del nombre del archivo. Escribir `tar -xvzf` y `tar -xzvf` son ambos válidos, pero `tar -fxzv archive.tar.gz` fallará porque `-f` espera que el siguiente argumento sea la ruta del archivo comprimido.

Guía de extracción paso a paso

1. Abrir una terminal

En la mayoría de las distribuciones Linux de escritorio, presione `Ctrl + Alt + T`. En un servidor sin interfaz gráfica al que se accede mediante SSH, ya se encuentra en una sesión de terminal.

2. Localizar el archivo comprimido

“`bash

ls -lh /path/to/directory

“`

Confirme que el archivo existe y anote su tamaño. El indicador `-h` muestra los tamaños en formato legible por humanos (KB, MB, GB).

3. Extraer en el lugar actual

Navegue al directorio que contiene el archivo comprimido y luego extráigalo:

“`bash

cd /path/to/directory

tar -xzvf archive-name.tar.gz

“`

Los archivos extraídos aparecerán en el directorio de trabajo actual, típicamente dentro de un subdirectorio que refleja la estructura interna del archivo comprimido.

4. Extraer en un directorio específico

Use el indicador `-C` para redirigir la salida a cualquier ruta de destino. Si el destino no existe, créelo primero:

“`bash

mkdir -p /opt/myapp

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

“`

El indicador `-p` en `mkdir` evita errores si el directorio ya existe — un buen hábito en scripts.

Ejemplo — despliegue de un archivo de aplicación web:

“`bash

mkdir -p ~/deployments/webapp-v2

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

“`

5. Extraer sin salida detallada

En scripts automatizados, trabajos cron o canalizaciones CI/CD, la salida detallada genera ruido en los registros. Elimine el indicador `-v`:

“`bash

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

“`

Esta es la forma preferida en la automatización de producción. El modo detallado es útil de forma interactiva cuando necesita confirmar qué archivos se están escribiendo.

Listar el contenido del archivo sin extraer

Antes de extraer un archivo desconocido — especialmente uno descargado de una fuente externa — inspeccione siempre su contenido primero. Algunos archivos contienen archivos con rutas absolutas o sin directorio de nivel superior, lo que puede dispersar archivos por su sistema de archivos de forma inesperada.

“`bash

tar -tzvf archive-name.tar.gz

“`

Si la salida muestra rutas que comienzan con `/` o `..`, extraiga con precaución o use `–strip-components` para sanear las rutas.

Para verificar si existe un directorio envolvente de nivel superior:

“`bash

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

“`

Si todas las rutas comparten un prefijo común (p. ej., `myapp-1.0/`), la extracción es limpia. Si no, cree un directorio dedicado y extráigalo con `-C`.

Manejo de componentes de ruta eliminados

Un escenario común en el mundo real: descarga un tarball de código fuente de GitHub que envuelve todo dentro de `project-main/`, pero desea el contenido directamente en `/opt/project/` sin esa capa de anidamiento adicional.

“`bash

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

“`

`–strip-components=1` elimina el primer segmento de ruta de cada archivo extraído, efectivamente "desenvolviendo" el directorio de nivel superior. Esto se usa ampliamente en scripts de despliegue y Dockerfiles.

Extraer un único archivo o directorio de un archivo comprimido

No siempre es necesario extraer todo. Para obtener un archivo específico:

“`bash

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

“`

Para extraer un directorio específico y todo su contenido:

“`bash

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

“`

La ruta debe coincidir exactamente con lo que reporta `tar -tzf`. Esta técnica es invaluable cuando se recupera un único archivo de configuración de un archivo de copia de seguridad grande sin desempaquetar gigabytes de datos.

Extraer archivos .tar sin compresión gzip

Un archivo `.tar` simple no tiene capa de compresión. Elimine el indicador `-z` por completo:

“`bash

tar -xvf archive-name.tar

“`

Comparación: .tar.gz frente a otros formatos de archivo comunes

FormatoExtensiónAlgoritmo de compresiónRatio de compresiónVelocidadTar requerido
——–———–———————–——————-——-————–
Tarball Gzip`.tar.gz` / `.tgz`DEFLATE (gzip)ModeradoRápido
Tarball Bzip2`.tar.bz2`Burrows-Wheeler (bzip2)AltoLento
Tarball XZ`.tar.xz`LZMA2 (xz)Muy altoMuy lento
Tarball Zstandard`.tar.zst`ZstandardAltoMuy rápido
Archivo ZIP`.zip`DEFLATEModeradoRápidoNo
Tar simple`.tar`NingunoNingunoEl más rápido

Conclusión clave: `.tar.xz` es ahora el formato preferido para los paquetes de distribución Linux (código fuente del kernel, tarballs de código fuente RPM/DEB) debido a su superior ratio de compresión. Sin embargo, `.tar.gz` sigue siendo dominante para la distribución de uso general debido a su soporte universal de herramientas y velocidad de extracción. `.tar.zst` (Zstandard) está ganando terreno en distribuciones modernas como Arch Linux por su excepcional equilibrio entre ratio de compresión y velocidad.

Para extraer estos formatos alternativos, reemplace `-z` con el indicador apropiado:

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

“`

Preservación de permisos de archivo y propiedad

Al extraer archivos que contienen archivos del sistema, scripts o binarios de aplicaciones, la preservación de permisos es importante:

“`bash

tar -xzvpf archive-name.tar.gz

“`

El indicador `-p` instruye a tar para restaurar los permisos originales. Sin él, se aplica la umask del usuario actual, lo que puede romper silenciosamente scripts ejecutables o binarios setuid.

Para preservar la propiedad (requiere root):

“`bash

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

“`

Esto es crítico al restaurar copias de seguridad del sistema o desplegar paquetes de aplicaciones que dependen de una propiedad específica de usuario/grupo para los límites de seguridad.

Errores comunes y cómo solucionarlos

`tar: Error is not recoverable: exiting now`

El archivo está corrupto o la descarga fue incompleta. Verifique la integridad del archivo con `md5sum` o `sha256sum` contra la suma de verificación publicada, luego vuelva a descargarlo.

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

Corrupción parcial dentro del archivo. Puede intentar una extracción parcial con `–ignore-zeros`, pero trate la salida como potencialmente incompleta.

`gzip: stdin: not in gzip format`

El archivo tiene una extensión `.tar.gz` pero no está realmente comprimido con gzip. Ejecute `file archive-name.tar.gz` para identificar el formato real. Puede ser un `.tar` simple, un `.zip`, o un archivo `.bz2` con una extensión incorrecta.

`Cannot open: No such file or directory`

La ruta es incorrecta o el nombre del archivo tiene un espacio. Ponga el nombre del archivo entre comillas: `tar -xzvf "my archive.tar.gz"`.

Permiso denegado durante la extracción

No tiene acceso de escritura al directorio de destino. Use `sudo` o cambie el destino con `-C` a un directorio de su propiedad.

Casos de uso prácticos en un VPS o servidor dedicado

En un entorno de Hosting VPS, los archivos `.tar.gz` aparecen constantemente: despliegue de versiones de aplicaciones, restauración de volcados de bases de datos, transferencia de paquetes de configuración entre servidores y desempaquetado de software compilado desde el código fuente.

Un flujo de trabajo de despliegue típico en un 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

“`

En Servidores Dedicados que manejan copias de seguridad a gran escala, combinar `tar` con tuberías evita escribir archivos intermedios en el disco por completo:

“`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 patrón es especialmente eficiente cuando el espacio en disco es limitado o cuando la velocidad de copia de seguridad es crítica.

Si gestiona un entorno de alojamiento web a través de un panel de control, herramientas como VPS con cPanel exponen las operaciones `.tar.gz` a través de la interfaz del Administrador de archivos, pero el comando `tar` subyacente siempre está disponible en la terminal para flujos de trabajo con scripts.

Al alojar aplicaciones que sirven archivos a través de HTTPS, combinar su canalización de despliegue con Certificados SSL correctamente configurados garantiza que los activos de la aplicación que extrae y despliega se sirvan de forma segura desde la primera solicitud.

Para equipos que gestionan múltiples entornos, los Paneles de control VPS pueden simplificar las operaciones programadas de copia de seguridad y restauración que dependen en gran medida de los archivos `.tar.gz`.

Referencia rápida: comandos tar más 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 decisión técnica

EscenarioComando recomendado
———-———————
Extracción interactiva, necesita ver el progreso`tar -xzvf archive.tar.gz`
Script automatizado o trabajo cron`tar -xzf archive.tar.gz -C /target`
Estructura de archivo desconocida, inspeccionar primero`tar -tzf archive.tar.gzhead -20`
Desplegar en directorio sin envoltorio de nivel superior`tar -xzf archive.tar.gz -C /target –strip-components=1`
Restaurar copia de seguridad del sistema con permisos exactos`sudo tar -xzvpf archive.tar.gz –same-owner`
Recuperar un único archivo de un archivo comprimido grande`tar -xzf archive.tar.gz path/to/file`
Verificar la integridad del archivo antes de extraer`tar -tzf archive.tar.gz > /dev/null && echo "OK"`

Preguntas frecuentes

¿Cuál es la diferencia entre .tar.gz y .tgz?

Son formatos idénticos. `.tgz` es simplemente un alias abreviado de extensión única para `.tar.gz`, utilizado cuando los sistemas de archivos o herramientas tienen limitaciones en la longitud de la extensión. Ambos se extraen con el mismo comando `tar -xzvf`.

¿Por qué `tar -xzvf` a veces extrae archivos en el directorio actual en lugar de un subdirectorio?

Esto ocurre cuando el archivo fue creado sin un envoltorio de directorio de nivel superior. Ejecute siempre `tar -tzf archive.tar.gz | head -20` antes de extraer. Si las rutas no comparten un prefijo común, cree un directorio dedicado y use `-C` para extraer en él, evitando la dispersión de archivos.

¿Puedo extraer un archivo .tar.gz sin el comando tar?

Sí. Puede descomprimir primero la capa gzip con `gunzip archive.tar.gz`, que produce `archive.tar`, luego extraer con `tar -xvf archive.tar`. Algunos sistemas también admiten `zcat archive.tar.gz | tar -xvf -` para canalizar la descompresión directamente en tar. Sin embargo, `tar -xzvf` en un único comando es siempre el enfoque más eficiente.

¿El indicador `-v` ralentiza la extracción en archivos grandes?

Marginalmente, sí. En archivos que contienen cientos de miles de archivos pequeños, la sobrecarga de imprimir cada nombre de archivo en stdout puede añadir tiempo medible. En contextos sensibles al rendimiento o automatizados, omita siempre `-v`.

¿Cómo extraigo un archivo .tar.gz como un usuario diferente sin cambiar de cuenta?

Use `sudo -u targetuser tar -xzvf archive.tar.gz -C /target/dir`. Esto ejecuta el proceso de extracción bajo la identidad del usuario de destino, asegurando que los archivos extraídos sean de su propiedad correctamente sin requerir un cambio completo de usuario mediante `su`.

15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar