Empaquetado y Compresión de Archivos

LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderemos a empaquetar y comprimir archivos y directorios utilizando comandos comunes de Linux como tar, gzip y zip. Estas herramientas son fundamentales para administrar archivos y directorios en sistemas Linux, permitiéndole almacenar y transferir datos de manera eficiente. Comenzaremos con operaciones básicas y avanzaremos gradualmente hacia tareas más complejas, explicando cada paso en detalle.

Este es un Laboratorio Guiado, que proporciona instrucciones paso a paso para ayudarle a aprender y practicar. Siga las instrucciones cuidadosamente para completar cada paso y adquirir experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 96%. Ha recibido una tasa de valoraciones positivas del 99% por parte de los alumnos.

Creación de una Estructura de Directorios de Ejemplo

Comencemos creando una estructura de directorios de muestra para trabajar. Esto nos ayudará a entender cómo funcionan el empaquetado y la compresión con diferentes tipos de archivos y carpetas.

Abra su terminal e introduzca los siguientes comandos:

cd ~/project
mkdir -p test_dir/{subdir1,subdir2}
echo "This is file 1" > test_dir/file1.txt
echo "This is file 2" > test_dir/file2.txt
echo "This is in subdir1" > test_dir/subdir1/subfile1.txt
echo "This is in subdir2" > test_dir/subdir2/subfile2.txt

Analicemos lo que hacen estos comandos:

  1. cd ~/project: Cambia su directorio actual a la carpeta project en su directorio personal.
  2. mkdir -p test_dir/{subdir1,subdir2}: Crea un nuevo directorio llamado test_dir y dos subdirectorios dentro de él: subdir1 y subdir2. La opción -p permite a mkdir crear directorios padres según sea necesario.
  3. Los comandos echo crean archivos de texto con contenido de ejemplo en diferentes ubicaciones dentro de nuestra nueva estructura.

Ahora, verifiquemos la estructura que hemos creado:

tree test_dir

Si no ve este resultado o recibe un error que dice "command not found", no se preocupe. Es posible que el comando tree no esté instalado en su sistema. Puede usar ls -R test_dir en su lugar, que mostrará un resultado similar (aunque menos gráfico).

Empaquetado de Archivos con tar

Ahora que tenemos nuestra estructura de directorios de ejemplo, aprendamos sobre el empaquetado de archivos usando el comando tar. tar significa "tape archive" (archivo de cinta) y originalmente se usaba para crear archivos en unidades de cinta. Hoy en día, se utiliza comúnmente para agrupar múltiples archivos y directorios en un solo archivo.

Vamos a empaquetar nuestro test_dir:

cd ~/project
tar -cvf test_archive.tar test_dir

Desglosemos este comando:

  • tar: El comando que estamos utilizando para crear el archivo.
  • -c: Esta opción le indica a tar que cree un nuevo archivo (create).
  • -v: Significa "verbose" (detallado). Hace que tar muestre los nombres de los archivos que está añadiendo al paquete. Es opcional pero útil para ver qué está sucediendo.
  • -f: Esta opción va seguida del nombre del archivo resultante que queremos crear.
  • test_archive.tar: Es el nombre que le damos a nuestro nuevo archivo empaquetado. La extensión .tar es la convencional para estos archivos.
  • test_dir: Es el directorio que estamos empaquetando.

Después de ejecutar este comando, debería ver una lista de los archivos que se están agregando al paquete.

Para ver el contenido del archivo sin extraerlo, puede usar:

tar -tvf test_archive.tar

Este comando enumera (-t) el contenido del archivo, de forma detallada (-v), desde el archivo (-f) llamado test_archive.tar.

Extracción de Archivos de un Paquete tar

Antes de comprimir nuestro archivo tar, aprendamos cómo extraer archivos de él. Esta es una habilidad importante cuando se trabaja con archivos empaquetados.

Para extraer el contenido de nuestro archivo test_archive.tar:

mkdir extracted_tar
tar -xvf test_archive.tar -C extracted_tar

Analicemos este comando:

  • mkdir extracted_tar: Crea un nuevo directorio llamado extracted_tar donde colocaremos el contenido de nuestro archivo.
  • tar: El comando que usamos para la extracción.
  • -x: Esta opción le indica a tar que extraiga (extract) los archivos.
  • -v: Hace que la operación sea detallada, mostrándonos cada archivo a medida que se extrae.
  • -f: Especifica el nombre del archivo sobre el cual operar. Al extraer, debe ir seguido de la ruta o nombre del archivo tar a procesar.
  • -C extracted_tar: Esta opción le indica a tar que se cambie al directorio extracted_tar antes de realizar la extracción.

Tras ejecutar el comando, verá la lista de archivos extraídos.

Para verificar la extracción, puede usar:

tree extracted_tar

O si tree no está disponible:

ls -R extracted_tar

Esto le mostrará la estructura de directorios y los archivos que estaban dentro del paquete.

Compresión de Archivos con gzip

Ahora que hemos creado un paquete tar, vamos a comprimirlo usando gzip:

gzip test_archive.tar

Este comando comprimirá test_archive.tar y lo renombrará como test_archive.tar.gz. El archivo original test_archive.tar será reemplazado por la versión comprimida.

Para ver el tamaño del archivo comprimido, puede usar el siguiente comando:

ls -lh test_archive.tar.gz

Las opciones -lh mostrarán el tamaño del archivo en un formato legible para humanos (como KB, MB, etc.).

Cabe destacar que, aunque la extensión .tar.gz es la más común, también podría encontrar .tgz, que es equivalente.

Diferencia entre Empaquetado y Compresión

Ahora que hemos realizado tanto el empaquetado como la compresión, entendamos la diferencia entre estas operaciones y comparemos los tamaños de los archivos.

  1. Empaquetado (Archivado):

    • Propósito: Combinar múltiples archivos y directorios en un solo archivo.
    • Qué hace: Agrupa archivos, añadiendo algunos metadatos.
    • Herramienta de ejemplo: tar (Tape Archive).
    • Resultado: El tamaño total del paquete suele ser ligeramente mayor que la suma de los tamaños de todos los archivos que contiene.
  2. Compresión:

    • Propósito: Reducir el tamaño de un archivo o de un paquete.
    • Qué hace: Aplica algoritmos para eliminar la redundancia en los datos, haciendo el archivo más pequeño.
    • Herramientas de ejemplo: gzip, bzip2, xz.
    • Resultado: El archivo comprimido es más pequeño que el original, pero requiere descompresión antes de su uso.

Comparemos los tamaños de nuestro directorio original, el paquete tar y el archivo comprimido tar.gz:

## Tamaño del directorio original (tamaño real del contenido de los archivos)
echo "Size of the original directory (file content):"
find test_dir -type f -exec ls -l {} \; | awk '{total += $5} END {print total " bytes"}'

## Tamaño del paquete tar (lo recrearemos para esta comparación)
tar -cvf test_archive_compare.tar test_dir
echo "Size of the tar archive:"
ls -lh test_archive_compare.tar

## Tamaño del archivo comprimido tar.gz
echo "Size of the compressed tar.gz file:"
ls -lh test_archive.tar.gz

## Como referencia, el uso de disco (que incluye el relleno de bloques/sectores)
echo "Disk usage of the original directory:"
du -sh test_dir

Notará que:

  1. El paquete tar es ligeramente más grande que la suma de los tamaños del contenido original. Esto se debe a que tar añade metadatos, como nombres de archivos, permisos, marcas de tiempo y estructuras de directorios.
  2. El archivo comprimido tar.gz es significativamente más pequeño que tanto los archivos originales como el paquete tar.
  3. El uso de disco (du) puede mostrar valores diferentes a los tamaños reales de los archivos porque incluye la sobrecarga de asignación de bloques del sistema de archivos.

El aumento de tamaño tras el empaquetado es normal y esperado. El formato tar añade una pequeña cantidad de información adicional para almacenar los metadatos, lo cual es necesario para reconstruir correctamente la estructura de directorios al desempaquetar. Esta sobrecarga suele ser insignificante para directorios grandes, pero puede notarse en archivos o directorios muy pequeños.

La compresión, por otro lado, reduce significativamente el tamaño al identificar y eliminar redundancias en los datos. Esto es particularmente efectivo para archivos de texto o archivos con contenido repetitivo.

Creación de un Archivo Comprimido en un Solo Paso

Aunque es útil entender los pasos separados de crear un paquete tar y luego comprimirlo, en la práctica, estos pasos suelen combinarse. El comando tar tiene una opción integrada para comprimir el archivo usando gzip mientras se está creando.

Vamos a crear un paquete tar comprimido de nuestro test_dir en un solo paso:

cd ~/project
tar -czvf test_combined.tar.gz test_dir

Este comando es similar al que usamos antes, con una adición importante:

  • -z: Esta opción le indica a tar que comprima el paquete usando gzip.

El archivo test_combined.tar.gz resultante es equivalente al que creamos en los dos pasos anteriores, pero lo hemos hecho todo a la vez.

Para ver el contenido de este archivo comprimido sin extraerlo:

tar -tzvf test_combined.tar.gz

La opción -z aquí le indica a tar que estamos tratando con un archivo comprimido con gzip.

Extracción de Archivos de un Paquete Comprimido

Ahora que hemos creado archivos comprimidos, es importante saber cómo extraerlos. Vamos a extraer el contenido de nuestro archivo test_combined.tar.gz:

mkdir extracted
tar -xzvf test_combined.tar.gz -C extracted

Desglosemos este comando:

  • mkdir extracted: Crea un nuevo directorio llamado extracted donde pondremos el contenido.
  • tar: El comando de extracción.
  • -x: Indica que queremos extraer archivos.
  • -z: Esta opción es necesaria porque estamos tratando con un archivo comprimido con gzip.
  • -v: Activa el modo detallado para ver el progreso.
  • -f: Seguido del nombre del archivo que queremos extraer.
  • -C extracted: Indica a tar que se mueva al directorio extracted antes de realizar la extracción.

Tras ejecutarlo, verá la lista de archivos extraídos.

Para verificar la extracción, puede usar:

tree extracted

O si tree no está disponible:

ls -R extracted

Esto mostrará la estructura de directorios y archivos que estaban en el paquete.

Uso de zip para Compatibilidad Multiplataforma

Aunque tar y gzip son comunes en sistemas Linux y tipo Unix, el formato zip se utiliza a menudo para una mejor compatibilidad con sistemas Windows. Vamos a crear un archivo zip de nuestro test_dir:

cd ~/project
zip -r test_archive.zip test_dir

Esto es lo que hace este comando:

  • zip: El comando para crear un archivo zip.
  • -r: Esta opción le indica a zip que trabaje de forma recursiva, incluyendo todos los archivos y subdirectorios.
  • test_archive.zip: El nombre que le damos a nuestro archivo zip.
  • test_dir: El directorio que estamos añadiendo al archivo zip.

Para descomprimir este archivo, puede usar:

unzip -d unzipped_files test_archive.zip

La opción -d especifica el directorio donde se realizará la descompresión. Si unzipped_files no existe, unzip lo creará.

Los archivos zip tienen la ventaja de ser fácilmente reconocibles y utilizables en prácticamente todos los sistemas operativos, lo que los convierte en una buena opción para compartir archivos con usuarios de diferentes plataformas.

Resumen

En este laboratorio, hemos aprendido varias técnicas importantes de empaquetado y compresión de archivos comúnmente utilizadas en Linux:

  1. Creamos una estructura de directorios de ejemplo para trabajar, demostrando cómo organizar archivos y carpetas.
  2. Utilizamos tar para empaquetar archivos sin compresión, lo cual es útil para agrupar múltiples elementos.
  3. Aprendimos a extraer archivos de un paquete tar, una habilidad esencial al trabajar con archivos empaquetados.
  4. Utilizamos gzip para comprimir archivos, lo que puede reducir significativamente el tamaño para almacenamiento o transferencia.
  5. Aprendimos la diferencia entre empaquetado y compresión, comprendiendo sus propósitos y casos de uso específicos.
  6. Aprendimos a combinar tar y gzip para crear archivos comprimidos en un solo paso, una operación muy común en sistemas Linux.
  7. Practicamos la extracción de archivos desde paquetes comprimidos, otra habilidad crucial.
  8. Finalmente, utilizamos zip para crear archivos con mejor compatibilidad multiplataforma, especialmente útil al compartir archivos con usuarios de Windows.

Estas habilidades son fundamentales para una gestión eficiente de archivos en Linux, especialmente cuando se manejan grandes cantidades de datos o se transfieren archivos entre sistemas. Recuerde que la compresión puede reducir significativamente el tamaño de los archivos, haciendo que el almacenamiento y la transferencia sean mucho más eficientes.

A medida que continúe trabajando con Linux, encontrará que estos comandos son invaluables para administrar sus archivos y directorios. Practique estas operaciones para dominar las técnicas de empaquetado y compresión.