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ón | Mnemónico | Descripción |
|---|---|---|
| -c | Create | Crea un nuevo archivo .tar |
| -x | eXtract | Extrae archivos de un .tar |
| -t | lisT | Lista el contenido sin extraer |
| -v | Verbose | Muestra los archivos mientras se procesan |
| -f | File | Especifica el nombre del archivo de archivado |
| -z | gZip | Comprime/descomprime usando gzip (.tar.gz, .tgz) |
| -j | bJip2 | Comprime/descomprime usando bzip2 (.tar.bz2) |
| -J | J/xz | Comprime/descomprime usando xz (.tar.xz) |
| -C | Change dir | Extrae en un directorio específico |
Ejemplo 1 — Archivar y comprimir con gzip
tar -czvf mi_resguardo_2025.tar.gz Documentos/
Documentos/ Documentos/informe.pdf Documentos/fotos.jpg ... (lista de archivos)
Ejemplo 2 — Extraer en un directorio específico
mkdir extraccion_temp cd extraccion_temp/ tar -xzvf ../mi_resguardo_2025.tar.gz
Referencia de operaciones comunes
| Acción | Comando |
|---|---|
| Crear tar sin comprimir | tar -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ífica | tar -xzvf backup.tar.gz -C /ruta/destino/ |
| Listar contenido | tar -tvf backup.tar.gz |
/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.
| Comando | Función | Descripción |
|---|---|---|
| gzip archivo | Comprime | Crea archivo.gz y elimina el original |
| gunzip archivo.gz | Descomprime | Crea archivo y elimina el .gz |
| gzip -d archivo.gz | Descomprime | Alternativa a gunzip |
| gzip -k archivo | Keep | Comprime pero mantiene el original |
| gzip -l archivo.gz | List | Ver ratio de compresión sin descomprimir |
Ejemplo práctico — Comprimir y descomprimir
# Copiamos un archivo grande para el ejemplo cp /etc/services services ls -lh services
-rw-r--r-- 1 jose jose 20K Oct 9 07:15 services
gzip services ls -lh services.gz
-rw-r--r-- 1 jose jose 7.5K Oct 9 07:15 services.gz
gunzip services.gz ls -lh services
-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.
| Comando | Archivo resultante | Descomprimir |
|---|---|---|
| bzip2 archivo | archivo.bz2 | bzip2 -d archivo.bz2 o bunzip2 archivo.bz2 |
| bzip2 -k archivo | archivo.bz2 + original | Mantiene el original |
| bunzip2 archivo.bz2 | archivo | Descomprime eliminando el .bz2 |
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.
| Comando | Archivo resultante | Descomprimir |
|---|---|---|
| xz archivo | archivo.xz | xz -d archivo.xz o unxz archivo.xz |
| xz -k archivo | archivo.xz + original | Mantiene el original |
| unxz archivo.xz | archivo | Descomprime eliminando el .xz |
Ejemplo comparativo con /etc/services
cp /etc/services services_xz xz services_xz ls -lh services_xz.xz
-rw-r--r-- 1 jose jose 6.8K Oct 9 07:16 services_xz.xz
unxz services_xz.xz ls services_xz
Comparativa de Compresores
Usando como referencia /etc/services (20K original):
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ón | Descripción |
|---|---|
| -r | Recursive: incluye subdirectorios |
| -e | Encrypt: pide contraseña para el ZIP |
Ejemplo — Comprimir directorio con contraseña
zip -r -e datos_trabajo.zip Trabajo/
Enter password: Verify password: adding: Trabajo/ (stored 0%) adding: Trabajo/plan.doc (deflated 5%) ...
unzip — Descomprimir ZIP
| Opción | Descripción |
|---|---|
| -d ruta | Directory: especifica el directorio de destino |
| -l archivo.zip | List: listar contenido sin extraer |
unzip datos_trabajo.zip -d /tmp/datos_temporales
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.
zcat /var/log/syslog.1.gz | less
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
# 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
file backup.tar.gz file backup.zip file backup.tar.bz2
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
file /bin/bash file /usr/bin/passwd
/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
| Campo | Significado |
|---|---|
| ELF 64-bit LSB executable | ELF = formato estándar de Linux. 64-bit LSB = compilado para x86-64 con formato Little Endian |
| dynamically linked | Depende de bibliotecas externas cargadas en tiempo de ejecución (no estáticas) |
| interpreter /lib64/ld-linux-x86-64.so.2 | El cargador dinámico que carga las bibliotecas antes de ejecutar el programa |
| stripped | Los símbolos de depuración han sido eliminados para reducir el tamaño del binario |
Ejemplo — Crear y verificar un tar.bz2
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
backup.tar.bz2: bzip2 compressed data, block size 900k
dd — Copia de Datos a Nivel de Bloque
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ón | Nombre completo | Descripción |
|---|---|---|
| if= | Input File | Archivo o dispositivo de entrada (fuente) |
| of= | Output File | Archivo o dispositivo de salida (destino) |
| bs= | Block Size | Tamaño de bloque para lectura/escritura (ej. 4M, 1M) |
| count= | Count | Número de bloques a copiar |
| status=progress | — | Muestra el progreso en tiempo real |
Ejemplo 1 — Imagen exacta de un disco USB
sudo dd if=/dev/sda of=/mnt/usb/sda_image.img bs=4M status=progress
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:
dd if=/dev/zero of=archivo_vacio.dat bs=1M count=100
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
| Parte | Significado | Propósito en el ejemplo |
|---|---|---|
| dd | Data Duplicator | El comando principal para copia a nivel de bloque |
| if=/dev/zero | Input File | Fuente virtual que produce bytes nulos (ceros) indefinidamente |
| of=archivo_vacio.dat | Output File | Nombre del archivo a crear en el directorio actual |
| bs=1M | Block Size | Cada lectura/escritura se hace en bloques de 1 Megabyte |
| count=100 | Count | Escribe 100 bloques de 1MB = 100 MB total |
ls -lh archivo_vacio.dat
-rw-r--r-- 1 jose jose 100M Oct 10 08:45 archivo_vacio.dat
Ejemplo 3 — Copiar archivo ISO
dd if=/home/jose/iso/original.iso of=/home/jose/iso/copia.iso bs=4M status=progress
Referencia Rápida — Índice de Comandos
| Comando | Sintaxis básica | Uso típico |
|---|---|---|
| tar -czvf | tar -czvf backup.tar.gz dir/ | Crear tarball comprimido con gzip |
| tar -xzvf | tar -xzvf backup.tar.gz | Extraer .tar.gz |
| tar -tvf | tar -tvf backup.tar.gz | Listar contenido sin extraer |
| gzip | gzip archivo | Comprimir → archivo.gz |
| gunzip | gunzip archivo.gz | Descomprimir .gz |
| gzip -k | gzip -k archivo | Comprimir y mantener original |
| bzip2 | bzip2 archivo | Comprimir → archivo.bz2 |
| bunzip2 | bunzip2 archivo.bz2 | Descomprimir .bz2 |
| xz | xz archivo | Comprimir → archivo.xz |
| unxz | unxz archivo.xz | Descomprimir .xz |
| zip -r | zip -r out.zip dir/ | Crear ZIP recursivo |
| zip -r -e | zip -r -e out.zip dir/ | Crear ZIP con contraseña |
| unzip -d | unzip out.zip -d /dest/ | Extraer en directorio específico |
| zcat | zcat archivo.gz | less | Ver .gz sin descomprimir |
| file | file archivo | Identificar tipo real del archivo |
| dd | dd if=origen of=destino bs=4M | Copia exacta a nivel de bloque |
Ejercicio Práctico Final
Flujo completo que cubre todas las operaciones: crear, comprimir, verificar, extraer e inspeccionar.
mkdir -p /home/jose/test echo "Hola mundo" > /home/jose/test/uno.txt echo "Prueba 2" > /home/jose/test/dos.txt
tar -czvf /home/jose/test.tar.gz /home/jose/test/
tar -tf /home/jose/test.tar.gz
file /home/jose/test.tar.gz
tar -xzvf /home/jose/test.tar.gz -C /home/jose/
dd if=/home/jose/test.tar.gz of=/home/jose/test_backup.img bs=1M status=progress