Ghost AcademySecLearn// Seguridad Informática
🌐 unfantasmaenelsistema.com
🗜️ Linux · Archivado · Compresión
Archivos y Compresión

Guía completa de comandos de archivado y compresión en Linux: tar, gzip, bzip2, xz, zip, zcat, file y dd.

targzipbzip2xz zipzcatfiledd

Comandos de Archivado y Compresión

Estos comandos se utilizan para combinar múltiples archivos en uno solo (archivado) y/o reducir su tamaño (compresión). Son herramientas fundamentales en la administración de sistemas Linux.

tar — Archivador de Cintas

El comando tar se usa para archivar (unir) varios archivos o directorios en un único archivo (conocido como tarball o archivo .tar). Puede opcionalmente comprimir el resultado usando diferentes algoritmos.

Opciones principales

OpciónMnemónicoDescripción
-cCreateCrea un nuevo archivo .tar
-xeXtractExtrae archivos de un .tar
-tlisTLista el contenido sin extraer
-vVerboseMuestra los archivos mientras se procesan
-fFileEspecifica el nombre del archivo de archivado
-zgZipComprime/descomprime usando gzip (.tar.gz, .tgz)
-jbJip2Comprime/descomprime usando bzip2 (.tar.bz2)
-JJ/xzComprime/descomprime usando xz (.tar.xz)
-CChange dirExtrae en un directorio específico

Ejemplo 1 — Archivar y comprimir con gzip

PASO 1 — Crear el tarball
bash
tar -czvf mi_resguardo_2025.tar.gz Documentos/
Salida esperada
Documentos/
Documentos/informe.pdf
Documentos/fotos.jpg
... (lista de archivos)

Ejemplo 2 — Extraer en un directorio específico

bash
mkdir extraccion_temp
cd extraccion_temp/
tar -xzvf ../mi_resguardo_2025.tar.gz

Referencia de operaciones comunes

AcciónComando
Crear tar sin comprimirtar -cvf backup.tar directorio/
Crear tar.gz (gzip)tar -czvf backup.tar.gz directorio/
Crear tar.bz2 (bzip2)tar -cjvf backup.tar.bz2 directorio/
Crear tar.xz (xz)tar -cJvf backup.tar.xz directorio/
Extraer aquítar -xzvf backup.tar.gz
Extraer en carpeta específicatar -xzvf backup.tar.gz -C /ruta/destino/
Listar contenidotar -tvf backup.tar.gz
ℹ️ Sobre la barra / inicial: Cuando tar archiva una ruta absoluta como /home/jose/documentos/, elimina automáticamente la barra inicial. Esto es por seguridad y portabilidad: al extraer, los archivos se ubican de forma relativa al directorio actual, sin riesgo de sobrescribir archivos del sistema.

gzip / gunzip — Compresión GZIP

gzip comprime un solo archivo, reemplazando el original con la versión .gz. gunzip hace lo opuesto.

ComandoFunciónDescripción
gzip archivoComprimeCrea archivo.gz y elimina el original
gunzip archivo.gzDescomprimeCrea archivo y elimina el .gz
gzip -d archivo.gzDescomprimeAlternativa a gunzip
gzip -k archivoKeepComprime pero mantiene el original
gzip -l archivo.gzListVer ratio de compresión sin descomprimir

Ejemplo práctico — Comprimir y descomprimir

bash
# Copiamos un archivo grande para el ejemplo
cp /etc/services services
ls -lh services
Salida
-rw-r--r-- 1 jose jose 20K Oct 9 07:15 services
bash
gzip services
ls -lh services.gz
Salida — ¡El original desapareció!
-rw-r--r-- 1 jose jose 7.5K Oct 9 07:15 services.gz
bash
gunzip services.gz
ls -lh services
Salida — ¡El original regresó!
-rw-r--r-- 1 jose jose 20K Oct 9 07:15 services

bzip2 / bunzip2 — Compresión BZip2

Funciona de manera idéntica a gzip/gunzip, pero utiliza un algoritmo que generalmente logra mejor ratio de compresión, aunque es más lento en el proceso.

ComandoArchivo resultanteDescomprimir
bzip2 archivoarchivo.bz2bzip2 -d archivo.bz2 o bunzip2 archivo.bz2
bzip2 -k archivoarchivo.bz2 + originalMantiene el original
bunzip2 archivo.bz2archivoDescomprime eliminando el .bz2
bash
bzip2 /home/jose/logs.txt       # Crea logs.txt.bz2
bzip2 -k /home/jose/logs.txt    # Mantiene el original
bunzip2 logs.txt.bz2            # Descomprime

xz / unxz — Alta Compresión

Similar a bzip2 pero más moderno. Generalmente logra la mejor tasa de compresión de los tres, a costa de mayor tiempo de procesamiento.

ComandoArchivo resultanteDescomprimir
xz archivoarchivo.xzxz -d archivo.xz o unxz archivo.xz
xz -k archivoarchivo.xz + originalMantiene el original
unxz archivo.xzarchivoDescomprime eliminando el .xz

Ejemplo comparativo con /etc/services

bash
cp /etc/services services_xz
xz services_xz
ls -lh services_xz.xz
Salida — ¡Aún más pequeño que gz!
-rw-r--r-- 1 jose jose 6.8K Oct 9 07:16 services_xz.xz
bash
unxz services_xz.xz
ls services_xz

Comparativa de Compresores

Usando como referencia /etc/services (20K original):

gzip
Extensión.gz
Tamaño7.5K
Velocidad★★★
Ratiobueno
bzip2
Extensión.bz2
Tamaño~7.0K
Velocidad★★
Ratiomejor
xz
Extensión.xz
Tamaño6.8K
Velocidad★
Ratioel mejor
💡 Cuándo usar cada uno: gzip para uso cotidiano y logs. bzip2 cuando el ratio importa más que la velocidad. xz para distribución de software o backups donde el tamaño es crítico.

zip / unzip — Formato ZIP Multiplataforma

El formato ZIP es un estándar multiplataforma muy común, diferente a los formatos nativos de Unix (tar.gz, etc.). Es compatible con Windows, macOS y Linux.

zip — Crear archivos ZIP

OpciónDescripción
-rRecursive: incluye subdirectorios
-eEncrypt: pide contraseña para el ZIP

Ejemplo — Comprimir directorio con contraseña

bash
zip -r -e datos_trabajo.zip Trabajo/
Salida
Enter password:
Verify password:
  adding: Trabajo/ (stored 0%)
  adding: Trabajo/plan.doc (deflated 5%)
...

unzip — Descomprimir ZIP

OpciónDescripción
-d rutaDirectory: especifica el directorio de destino
-l archivo.zipList: listar contenido sin extraer
bash
unzip datos_trabajo.zip -d /tmp/datos_temporales
Salida
Archive:  datos_trabajo.zip
[datos_trabajo.zip] Trabajo/plan.doc password:
  extracting: /tmp/datos_temporales/Trabajo/plan.doc
...

zcat — Ver Archivos Comprimidos sin Descomprimir

zcat muestra el contenido de archivos comprimidos con gzip sin descomprimirlos permanentemente. Muy útil para inspeccionar archivos de log comprimidos.

bash
zcat /var/log/syslog.1.gz | less
ℹ️ Sobre syslog.1.gz: Este archivo existe cuando logrotate ha hecho su trabajo. Cuando el syslog principal alcanza cierto tamaño, logrotate le cambia el nombre a syslog.1 y lo comprime a syslog.1.gz. En máquinas recién instaladas puede no existir aún.

Crear un archivo de prueba si no existe syslog.1.gz

bash
# Verificar si existe
ls -lh /var/log/syslog.1.gz

# Si no existe, crear uno de prueba:
echo "Línea de prueba 1" > syslog.1
echo "Oct 10 07:30:05 servidor kernel: Linux version 6.5.0" >> syslog.1
gzip syslog.1

# Ahora inspeccionar:
zcat syslog.1.gz | less

file — Identificar Tipo de Archivo

Este comando examina el contenido real del archivo, no su extensión, para determinar de qué tipo se trata. Es fundamental en el contexto de archivos comprimidos para identificar formatos desconocidos.

Identificar archivos comprimidos

bash
file backup.tar.gz
file backup.zip
file backup.tar.bz2
Salida esperada
backup.tar.gz:  gzip compressed data, from Unix, original size modulo 2^32 ...
backup.zip:     Zip archive data, at least v2.0 to extract
backup.tar.bz2: bzip2 compressed data, block size 900k

Identificar ejecutables

bash
file /bin/bash
file /usr/bin/passwd
Salida de /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
           dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2,
           BuildID[sha1]=..., for GNU/Linux 3.2.0, stripped

Interpretando la salida de un ELF

CampoSignificado
ELF 64-bit LSB executableELF = formato estándar de Linux. 64-bit LSB = compilado para x86-64 con formato Little Endian
dynamically linkedDepende de bibliotecas externas cargadas en tiempo de ejecución (no estáticas)
interpreter /lib64/ld-linux-x86-64.so.2El cargador dinámico que carga las bibliotecas antes de ejecutar el programa
strippedLos símbolos de depuración han sido eliminados para reducir el tamaño del binario

Ejemplo — Crear y verificar un tar.bz2

bash
mkdir datos_ejemplo
echo "Archivo 1" > datos_ejemplo/a.txt
echo "Archivo 2" > datos_ejemplo/b.txt

tar -cjvf backup.tar.bz2 datos_ejemplo/
file backup.tar.bz2
Salida de file
backup.tar.bz2: bzip2 compressed data, block size 900k

dd — Copia de Datos a Nivel de Bloque

⚠️ ADVERTENCIA: dd es extremadamente potente. Un error en if= u of= puede sobrescribir particiones completas o discos enteros sin posibilidad de recuperación. Verifica siempre dos veces los parámetros antes de ejecutar.

El comando dd se utiliza para copiar y convertir datos byte a byte. Se usa para crear imágenes de disco, grabar ISOs, copias de seguridad a nivel de bloque y archivos de prueba.

OpciónNombre completoDescripción
if=Input FileArchivo o dispositivo de entrada (fuente)
of=Output FileArchivo o dispositivo de salida (destino)
bs=Block SizeTamaño de bloque para lectura/escritura (ej. 4M, 1M)
count=CountNúmero de bloques a copiar
status=progress—Muestra el progreso en tiempo real

Ejemplo 1 — Imagen exacta de un disco USB

bash
sudo dd if=/dev/sda of=/mnt/usb/sda_image.img bs=4M status=progress
Salida
450+0 records in
450+0 records out
1887436800 bytes (1.9 GB, 1.8 GiB) copied, 32.545 s, 58.0 MB/s

Ejemplo 2 — Crear archivo de 100 MB relleno de ceros

Útil para pruebas de rendimiento o crear archivos swap:

bash
dd if=/dev/zero of=archivo_vacio.dat bs=1M count=100
Salida
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.04 s, 2.6 GB/s

Desglose del comando

ParteSignificadoPropósito en el ejemplo
ddData DuplicatorEl comando principal para copia a nivel de bloque
if=/dev/zeroInput FileFuente virtual que produce bytes nulos (ceros) indefinidamente
of=archivo_vacio.datOutput FileNombre del archivo a crear en el directorio actual
bs=1MBlock SizeCada lectura/escritura se hace en bloques de 1 Megabyte
count=100CountEscribe 100 bloques de 1MB = 100 MB total
bash
ls -lh archivo_vacio.dat
Resultado esperado
-rw-r--r-- 1 jose jose 100M Oct 10 08:45 archivo_vacio.dat

Ejemplo 3 — Copiar archivo ISO

bash
dd if=/home/jose/iso/original.iso of=/home/jose/iso/copia.iso bs=4M status=progress

Referencia Rápida — Índice de Comandos

ComandoSintaxis básicaUso típico
tar -czvftar -czvf backup.tar.gz dir/Crear tarball comprimido con gzip
tar -xzvftar -xzvf backup.tar.gzExtraer .tar.gz
tar -tvftar -tvf backup.tar.gzListar contenido sin extraer
gzipgzip archivoComprimir → archivo.gz
gunzipgunzip archivo.gzDescomprimir .gz
gzip -kgzip -k archivoComprimir y mantener original
bzip2bzip2 archivoComprimir → archivo.bz2
bunzip2bunzip2 archivo.bz2Descomprimir .bz2
xzxz archivoComprimir → archivo.xz
unxzunxz archivo.xzDescomprimir .xz
zip -rzip -r out.zip dir/Crear ZIP recursivo
zip -r -ezip -r -e out.zip dir/Crear ZIP con contraseña
unzip -dunzip out.zip -d /dest/Extraer en directorio específico
zcatzcat archivo.gz | lessVer .gz sin descomprimir
filefile archivoIdentificar tipo real del archivo
dddd if=origen of=destino bs=4MCopia exacta a nivel de bloque

Ejercicio Práctico Final

Flujo completo que cubre todas las operaciones: crear, comprimir, verificar, extraer e inspeccionar.

🏋️ Ejercicio — Flujo Completo
PASO 1 — Crear estructura de prueba
bash
mkdir -p /home/jose/test
echo "Hola mundo" > /home/jose/test/uno.txt
echo "Prueba 2"   > /home/jose/test/dos.txt
PASO 2 — Comprimir en tar.gz
bash
tar -czvf /home/jose/test.tar.gz /home/jose/test/
PASO 3 — Listar contenido sin extraer
bash
tar -tf /home/jose/test.tar.gz
PASO 4 — Verificar el tipo de archivo
bash
file /home/jose/test.tar.gz
PASO 5 — Extraer
bash
tar -xzvf /home/jose/test.tar.gz -C /home/jose/
PASO 6 — Backup exacto con dd
bash
dd if=/home/jose/test.tar.gz of=/home/jose/test_backup.img bs=1M status=progress