tar — Archivador y Compresor
Combina múltiples archivos/directorios en un solo tarball, con compresión opcional
tar (Tape ARchiver) agrupa archivos en un único fichero .tar y, opcionalmente, lo comprime con gzip, bzip2 o xz. El resultado se conoce como tarball.
sintaxis
tar [opciones] archivo.tar [archivos/directorios]
Opciones comunes
| Opción | Función | 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 a medida que se procesan. |
| -f | File | Especifica el nombre del archivo de archivado. Siempre va al final. |
| -z | Gzip | Comprime/descomprime con gzip → .tar.gz / .tgz. |
| -j | Bzip2 | Comprime/descomprime con bzip2 → .tar.bz2. |
| -J | xz | Comprime/descomprime con xz → .tar.xz. |
| -C | directory | Especifica el directorio de destino al extraer. |
Preparar archivos de ejemplo
bash
mkdir -p /home/jose/documentos/informes echo "Reporte 1" > /home/jose/documentos/documento_a.txt echo "Informe de ventas" > /home/jose/documentos/informes/ventas_2025.txt
Ejemplo 1 — Archivar sin comprimir
bash — crear .tar
tar -cvf backup.tar /home/jose/documentos/ # tar elimina automáticamente la / inicial por seguridad home/jose/documentos/ home/jose/documentos/documento_a.txt home/jose/documentos/informes/ventas_2025.txt
ℹ️ ¿Por qué se elimina la
Por seguridad: si tar conservara la
/ inicial?Por seguridad: si tar conservara la
/, al extraer el archivo en otro sistema escribiría en las rutas absolutas originales, pudiendo sobrescribir archivos del sistema. Al eliminarla, la extracción es relativa al directorio actual.Ejemplo 2 — Archivar y comprimir con gzip
bash — crear .tar.gz
tar -czvf backup.tar.gz /home/jose/documentos/ home/jose/documentos/ home/jose/documentos/documento_a.txt ...
Ejemplo 3 — Extraer en directorio específico
bash — extraer .tar.gz
mkdir extraccion_temp tar -xzvf backup.tar.gz -C /home/jose/restaurar/
Ejemplo 4 — Listar contenido sin extraer
bash — listar
tar -tvf backup.tar.gz
💡 Receta rápida:
-czvf para crear, -xzvf para extraer. La f siempre al final y seguida del nombre del archivo.
gzip / gunzip
Compresión individual de archivos — formato .gz
gzip comprime un único archivo y reemplaza el original con la versión .gz. gunzip hace la operación inversa.
| Comando | Función | Descripción |
|---|---|---|
| gzip archivo | Comprime | Crea archivo.gz y elimina el original. |
| gunzip archivo.gz | Descomprime | Restaura el original 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 | Muestra la tasa de compresión sin descomprimir. |
Ejemplo práctico — Comprimir y descomprimir
bash
# Copiar 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 # Comprimir — el original desaparece gzip services ls -lh services.gz -rw-r--r-- 1 jose jose 7.5K Oct 9 07:15 services.gz # Descomprimir — el original regresa gunzip services.gz ls -lh services -rw-r--r-- 1 jose jose 20K Oct 9 07:15 services # Mantener el original al comprimir gzip -k /home/jose/notas.txt # Ahora existen: notas.txt y notas.txt.gz
bzip2 / bunzip2
Mayor compresión que gzip, algo más lento — formato .bz2
| Comando | Archivo resultante | Descompresión |
|---|---|---|
| bzip2 archivo | archivo.bz2 (original eliminado) | bzip2 -d archivo.bz2 o bunzip2 archivo.bz2 |
| bzip2 -k archivo | archivo.bz2 (original conservado) | — |
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, más moderno que bzip2 — formato .xz
| Comando | Archivo resultante | Descompresión |
|---|---|---|
| xz archivo | archivo.xz (original eliminado) | xz -d archivo.xz o unxz archivo.xz |
| xz -k archivo | archivo.xz (original conservado) | — |
bash — xz supera a gzip en tamaño
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 # 6.8K vs 7.5K de gzip — ¡más comprimido! unxz services_xz.xz
Comparativa de compresores
gzip
.gz / .tar.gz
Velocidad: ⚡ Rápida
Compresión: Media
Ejemplo: 20K → 7.5K
bzip2
.bz2 / .tar.bz2
Velocidad: 🐢 Más lenta
Compresión: Alta
Más compacto que gzip
xz
.xz / .tar.xz
Velocidad: 🐢🐢 Más lenta
Compresión: Muy alta
Ejemplo: 20K → 6.8K
Comparativa tamaño — archivo /etc/services (20K original)
services
20K
services.gz
7.5K
services_xz.xz
6.8K
zip / unzip — Formato multiplataforma
Estándar en Windows y macOS — diferente a los formatos nativos UNIX
zip
Crear archivos ZIP
| Opción | Descripción |
|---|---|
| -r | Recursive — incluye subdirectorios. |
| -e | Encrypt — pide una contraseña para el ZIP. |
bash — comprimir varios archivos y directorios
# Comprimir varios archivos zip documentos.zip /home/jose/archivo1.txt /home/jose/archivo2.txt # Comprimir recursivamente un directorio zip -r documentos.zip /home/jose/documentos/ # Comprimir con contraseña (-e) zip -r -e datos_trabajo.zip Trabajo/ Enter password: Verify password: adding: Trabajo/ (stored 0%) adding: Trabajo/plan.doc (deflated 5%)
unzip
Extraer archivos ZIP
| Opción | Descripción |
|---|---|
| -d directorio | Directory — especifica el directorio de destino. |
bash — extraer en directorio específico
unzip documentos.zip -d /home/jose/restaurar/ # Si tiene contraseña, la pedirá automáticamente 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 comprimidos sin descomprimir
Inspecciona archivos .gz directamente sin crear archivos temporales
zcat descomprime el contenido en memoria y lo envía a stdout — el archivo .gz original no se modifica.
bash — inspeccionar log comprimido
# Ver syslog rotado con paginador sudo zcat /var/log/syslog.1.gz | less # Verificar si el archivo existe primero ls -lh /var/log/syslog.1.gz # Si no existe, crear uno de prueba echo "Línea de prueba 1" > syslog.1 gzip syslog.1 zcat syslog.1.gz | less
📌 ¿Cuándo existe /var/log/syslog.1.gz?
syslogarchivo activo
→
logrotate
rota el log
→
rota el log
syslog.1renombrado
→
gzip comprime
→
syslog.1.gzarchivo rotado
→
syslog.2.gzsiguiente rotación
ℹ️ En una máquina recién instalada puede que
syslog.1.gz no exista aún. Aparece una vez que logrotate ha hecho su primera rotación de logs.file — Identificar tipo de archivo
Examina los bytes del archivo, no la extensión
file es fundamental en el contexto de archivos comprimidos: identifica el formato real del archivo aunque tenga una extensión incorrecta o no tenga ninguna.
bash — identificar formatos comprimidos
# Crear y comprimir un ejemplo .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/ # Identificar tipo file backup.tar.bz2 backup.tar.bz2: bzip2 compressed data, block size 900k file backup.tar.gz backup.tar.gz: gzip compressed data, ... file backup.zip backup.zip: Zip archive data
file en binarios — Formato ELF
bash — inspeccionar ejecutables
file /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 file /usr/bin/passwd
| Término | Significado |
|---|---|
| ELF | Executable and Linkable Format — formato estándar de binarios en Linux para ejecutables, bibliotecas y core dumps. |
| 64-bit LSB | Compilado para procesador de 64 bits con byte order Little Endian (Least Significant Byte). |
| dynamically linked | Depende de bibliotecas externas que se cargan en tiempo de ejecución. Ahorra espacio en disco. |
| interpreter /lib64/... | Ruta al cargador dinámico — carga las bibliotecas necesarias antes de ejecutar el programa. |
| stripped | Los símbolos de depuración han sido eliminados del binario para reducir su tamaño. |
ℹ️ Relevancia en seguridad (buffer overflow):
En arquitecturas 32 bits (x86), los punteros ocupan 4 bytes y se usa el registro EIP. En 64 bits (x86-64), los punteros son 8 bytes, se usa RIP, y los argumentos se pasan por registros (RDI, RSI, RDX…). Esto hace que la explotación de buffer overflows en 64 bits requiera técnicas avanzadas como ROP chaining para sortear NX/DEP y ASLR.
En arquitecturas 32 bits (x86), los punteros ocupan 4 bytes y se usa el registro EIP. En 64 bits (x86-64), los punteros son 8 bytes, se usa RIP, y los argumentos se pasan por registros (RDI, RSI, RDX…). Esto hace que la explotación de buffer overflows en 64 bits requiera técnicas avanzadas como ROP chaining para sortear NX/DEP y ASLR.
dd — Copia y conversión de bajo nivel
Data Duplicator — copia byte a byte · imágenes de disco · archivos de prueba
Advertencia — Comando destructivo
El uso incorrecto de dd puede sobrescribir particiones enteras del sistema sin confirmación. Siempre verifica los parámetros
if= y of= antes de ejecutar. Un error en of= puede destruir datos irrecuperablemente.| Opción | Función | 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 | Progress | Muestra el progreso de la copia en tiempo real. |
Ejemplo 1 — Imagen de disco completo
bash — imagen de /dev/sda (requiere sudo)
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 — Backup de dispositivo USB
bash
sudo dd if=/dev/sdb of=/home/jose/usb_backup.img bs=4M status=progress
Ejemplo 3 — Crear archivo de 100 MB lleno de ceros
bash — útil para pruebas o 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 # Verificar tamaño ls -lh archivo_vacio.dat -rw-r--r-- 1 jose jose 100M Oct 10 08:45 archivo_vacio.dat
Anatomía del comando dd
| Parte del comando | Significado | Propósito en el ejemplo |
|---|---|---|
| dd | Data Duplicator | Comando principal para copia a nivel de bloque. |
| if=/dev/zero | Input File | Fuente virtual que produce bytes nulos (ceros binarios) indefinidamente. |
| of=archivo_vacio.dat | Output File | Nombre del archivo que se crea en el directorio actual. |
| bs=1M | Block Size | Cada lectura y escritura se hace en bloques de 1 Megabyte. |
| count=100 | Count | Se escriben 100 bloques de 1 MB = 100 MB totales. |
📐 Cálculo:
1 MB/bloque × 100 bloques = 100 MBEjercicio Final Integrador
Combina todos los comandos: crear · comprimir · listar · inspeccionar · extraer · clonar
🎯 Objetivo: flujo completo de archivado y compresión
bash — ejercicio completo
# 1. Crear carpeta de prueba con archivos mkdir -p /home/jose/test echo "Hola mundo" > /home/jose/test/uno.txt echo "Prueba 2" > /home/jose/test/dos.txt # 2. Comprimir en tar.gz tar -czvf /home/jose/test.tar.gz /home/jose/test/ # 3. Ver contenido sin extraer tar -tvf /home/jose/test.tar.gz # 4. Identificar tipo de archivo file /home/jose/test.tar.gz /home/jose/test.tar.gz: gzip compressed data, ... # 5. Extraer en directorio específico tar -xzvf /home/jose/test.tar.gz -C /home/jose/ # 6. Crear backup exacto con dd dd if=/home/jose/test.tar.gz of=/home/jose/test_backup.img bs=1M status=progress # BONUS: comparar compresores sobre el mismo directorio tar -czvf test.tar.gz /home/jose/test/ # gzip tar -cjvf test.tar.bz2 /home/jose/test/ # bzip2 tar -cJvf test.tar.xz /home/jose/test/ # xz ls -lh test.tar.*
💡 Resumen de extensiones:
.tar = solo archivado · .tar.gz = tar + gzip · .tar.bz2 = tar + bzip2 · .tar.xz = tar + xz · .zip = zip multiplataforma