Empaquetado y compresión de archivos

LinuxBeginner
Practicar Ahora

Introducción

El empaquetado y la compresión resuelven problemas relacionados, pero diferentes. Un archivo combina un árbol de directorios en un único flujo de datos y conserva sus nombres y estructura. La compresión representa los datos de forma más compacta. Un archivo .tar es un archivo empaquetado; un archivo .gz contiene datos comprimidos con gzip; y un archivo .tar.gz es un archivo tar comprimido con gzip.

Usted creará un proyecto pequeño, generará cada formato, inspeccionará un archivo antes de extraerlo, restaurará su contenido en un directorio independiente y comparará los datos restaurados con los originales. Este flujo de inspección, extracción y verificación evita sobrescribir archivos originales sin comprobarlos.

Cree un árbol de directorios que conservará

En este paso, creará un árbol de origen pequeño y registrará qué elementos deben conservarse durante el empaquetado y la extracción.

Cree los directorios de configuración, notas y datos:

cd /home/labex/project/archive-lab
mkdir -p source/{config,notes,data}

Escriba tres archivos con contenido diferente:

printf 'mode=training\nport=8080\n' > source/config/app.conf
printf 'Archive the complete project tree.\n' > source/notes/README.txt
printf 'alpha,beta,gamma\n1,2,3\n' > source/data/sample.csv

Use find para inspeccionar los archivos normales mediante rutas relativas al directorio de origen:

find source -type f -printf '%P\n' | sort

Cree e inspeccione un archivo tar

En este paso, empaquetará el árbol de origen sin comprimirlo y revisará los nombres de sus elementos.

Las letras principales de operación de tar son c para crear, t para listar, x para extraer y f para indicar el nombre del archivo. Use -C para cambiar el directorio de trabajo de tar antes de agregar source; así evitará almacenar una ruta absoluta larga:

cd /home/labex/project/archive-lab
tar -cf project.tar -C /home/labex/project/archive-lab source

El árbol de origen seguirá existiendo porque la creación del archivo lo lee, pero no lo mueve. Inspeccione tanto el archivo como uno de los archivos originales:

ls -lh project.tar
ls -l source/config/app.conf

Muestre los elementos antes de extraerlos:

tar -tf project.tar > tar-members.txt
cat tar-members.txt

Todos los elementos deben comenzar por source/ y no debe haber ninguna / inicial. Las rutas relativas de los elementos hacen que la restauración sea más segura y portátil.

Extraiga de forma segura y compare el resultado

En este paso, extraerá el contenido en un destino vacío en lugar de hacerlo sobre el origen. Después comparará ambos árboles.

Cree un directorio de restauración y use -C para indicar el destino de la extracción:

cd /home/labex/project/archive-lab
mkdir tar-restore
tar -xf project.tar -C tar-restore

Inspeccione las rutas restauradas:

find tar-restore -type f -printf '%P\n' | sort

Compare los árboles de forma recursiva. diff -r no muestra ninguna salida y termina correctamente cuando los árboles coinciden:

diff -r source tar-restore/source
echo "tar restore matches source" > tar-restore-ok.txt
cat tar-restore-ok.txt

Comprima y descomprima un archivo con Gzip

En este paso, verá en qué se diferencia gzip de un archivo empaquetado, ya que gzip opera sobre un único archivo normal.

Copie un archivo para no modificar el árbol de origen y, después, comprima la copia:

cd /home/labex/project/archive-lab
cp source/data/sample.csv sample-copy.csv
gzip sample-copy.csv

De forma predeterminada, gzip reemplaza la entrada por sample-copy.csv.gz:

ls -lh sample-copy.csv.gz
file sample-copy.csv.gz

Descomprímalo y compare su contenido con el original:

gunzip sample-copy.csv.gz
cmp source/data/sample.csv sample-copy.csv
echo "gzip round trip matches" > gzip-round-trip-ok.txt
cat gzip-round-trip-ok.txt

Gzip no empaqueta un árbol de directorios por sí solo; tar proporciona esa estructura.

Cree y restaure un archivo tar comprimido

En este paso, combinará el empaquetado de tar con la compresión gzip. La opción z indica a tar que pase los datos del archivo por gzip.

Cree project.tar.gz e inspecciónelo con las opciones -tzf correspondientes:

cd /home/labex/project/archive-lab
tar -czf project.tar.gz -C /home/labex/project/archive-lab source
tar -tzf project.tar.gz > targz-members.txt
cat targz-members.txt

Extraiga el contenido en un destino independiente y verifique el árbol:

mkdir targz-restore
tar -xzf project.tar.gz -C targz-restore
diff -r source targz-restore/source
echo "tar.gz restore matches source" > targz-restore-ok.txt
cat targz-restore-ok.txt

Las extensiones comunican el formato a las personas y a las herramientas: .tar.gz indica claramente que se trata de un archivo tar comprimido con gzip.

Intercambie el proyecto como un archivo Zip

En este paso, creará e inspeccionará un archivo Zip, un formato común en Linux, macOS y Windows.

zip -r agrega un árbol de directorios de forma recursiva. Ejecútelo desde la raíz del laboratorio para que las rutas almacenadas comiencen por source/:

cd /home/labex/project/archive-lab
zip -r project.zip source

Muestre los elementos sin extraerlos:

unzip -l project.zip

Use -d para elegir un destino independiente y, después, compare el resultado:

unzip -q project.zip -d zip-restore
diff -r source zip-restore/source
echo "zip restore matches source" > zip-restore-ok.txt
cat zip-restore-ok.txt

Resumen

Ha separado el empaquetado de la compresión, ha creado y listado archivos tar, ha completado un ciclo de compresión y descompresión con gzip, ha combinado ambas operaciones en .tar.gz y ha intercambiado el mismo árbol mediante Zip. Lo más importante es que ha restaurado el contenido en directorios independientes y ha comparado los datos, en lugar de asumir que crear el archivo era suficiente.