-
Notifications
You must be signed in to change notification settings - Fork 0
02 Compresion y Archivado de Archivos
La compresión de archivos consiste en convertir un archivo en uno más pequeño al eliminar datos redundantes. Estos datos son reestructurados de tal manera que ocupan menos espacio. Sin embargo, estos archivos comprimidos no pueden ser utilizados como sus versiones originales, sino que solo sirven como archivos de respaldo. Si se requiere utilizar el archivo original, es necesario descomprimir el archivo.
Important
En archivos pequeños, la compresión suele ser pequeña, pero en archivos grandes, suele ser significativa.
Tip
Evita sobrecomprimir: al comprimir archivos binarios (e.g., archivos
multimedia) con utilidades como gzip, puedes estar comprimiendo un archivo
que ya viene comprimido (optimizado), lo cual puede resultar incluso en un
archivo más grande que el original, por ejemplo:
admin@server:~$ gzip imagen.jpgSi quieres reducir el espacio de archivos binarios, mejor utiliza utilidades de optimización específicas. Estas reducen el tamaño aplicando técnicas como eliminación de redundancia y metadatos, sin cambiar el formato del archivo.
GNU zip (gzip) es una utilidad de compresión que reduce el tamaño de los archivos seleccionados.
Los archivos comprimidos con gzip comúnmente tienen la extensión .gz.
gzip [ opciones ] { archivo ... }
| Comando | Descripción | Ejemplo |
|---|---|---|
| gzip archivo... | Comprime archivos en formato GZIP, reemplazando el archivo original. | gzip documento.txt |
|
gzip -d archivo... gunzip archivo... |
Descomprime archivos en formato GZIP. | gzip -d documento.txt.gz |
| gzip -# archivo... | Comprime con nivel específico (1-9). Predeterminado: 6. | gzip -9 documento.txt |
| gzip --fast archivo... | Comprime con el nivel más rápido (equivalente a -1). |
gzip --fast documento.txt |
| gzip --best archivo... | Comprime con el nivel más alto (equivalente a -9). |
gzip --best documento.txt |
| gzip -k archivo... | Conserva el archivo original tras la compresión. | gzip -k documento.txt |
| gzip -r directorio | Comprime recursivamente todos los archivos en el directorio especificado. | gzip -r /home/user/docs |
| gzip -t archivo... | Verifica la integridad de los archivos comprimidos. | gzip -t documento.txt.gz |
| gzip -l archivo... | Lista información sobre los archivos comprimidos. | gzip -l documento.txt.gz |
| gzip -v archivo... | Muestra el nombre y el porcentaje de reducción de cada archivo comprimido o descomprimido. |
gzip -dv documento.tar.gzgzip -v documento.txt
|
bzip2 es una utilidad de compresión de código abierto que reduce el tamaño
de los archivos utilizando el algoritmo Burrows-Wheeler (BWT) junto con la
codificación Huffman. Generalmente ofrece una mayor tasa de compresión que
gzip, aunque es más lenta.
Los archivos comprimidos con bzip2 comúnmente tienen la extensión .bz2.
bzip2 [ opciones ] { archivo ... }
| Comando | Descripción | Ejemplo |
|---|---|---|
| bzip2 archivo... | Comprime archivos en formato BZIP2, reemplazando el archivo original. | bzip2 archivo.log |
|
bzip2 -d archivo... bunzip2 archivo... |
Descomprime archivos en formato BZIP2. | bzip2 -d archivo.log.bz2 |
| bzip2 -# archivo... | Comprime con nivel específico (1-9). Predeterminado: 9. | bzip2 -1 archivo.log |
| bzip2 --fast archivo... | Comprime con el nivel más rápido (equivalente a -1). |
bzip2 --fast archivo.log |
| bzip2 --best archivo... | Comprime con el nivel más alto (equivalente a -9). |
bzip2 --best archivo.log |
| bzip2 -k archivo... | Conserva el archivo original tras la compresión. | bzip2 -k archivo.log |
| bzip2 -t archivo... | Verifica la integridad de los archivos comprimidos. | bzip2 -t archivo.log.bz2 |
| bzip2 -v archivo... | Muestra el ratio de compresión de cada archivo procesado. Repetir la opción incrementa la verbosidad. |
bzip2 -dv archivo.log.bz2bzip2 -v archivo.log
|
Note
bzip2 no cuenta con opciones -l ni -r equivalentes a las de gzip. Para
listar el contenido de un archivo comprimido con bzip2, se utiliza
tar -tjf en combinación. Para compresión recursiva, se puede combinar con
find (e.g., find . -type f -exec bzip2 {} \;).
xz es una utilidad de compresión de propósito general que utiliza el algoritmo LZMA2. Ofrece la mayor tasa de compresión entre las utilidades comunes, a costa de mayor tiempo de procesamiento y uso de memoria. Es el formato estándar para la distribución de código fuente en muchos proyectos de software libre (e.g., el kernel de Linux).
Los archivos comprimidos con xz comúnmente tienen la extensión .xz.
xz [ opciones ] { archivo ... }
| Comando | Descripción | Ejemplo |
|---|---|---|
| xz archivo... | Comprime archivos en formato XZ, reemplazando el archivo original. | xz database.sql |
|
xz -d archivo... unxz archivo... |
Descomprime archivos en formato XZ. | xz -d database.sql.xz |
| xz -# archivo... | Comprime con nivel específico (0-9). Predeterminado: 6. | xz -9 database.sql |
| xz --fast archivo... | Comprime con el nivel más rápido (equivalente a -0). |
xz --fast database.sql |
| xz --best archivo... | Comprime con el nivel más alto (equivalente a -9). |
xz --best database.sql |
| xz -k archivo... | Conserva el archivo original tras la compresión. | xz -k database.sql |
| xz -t archivo... | Verifica la integridad de los archivos comprimidos. | xz -t database.sql.xz |
| xz -l archivo... | Lista información sobre los archivos comprimidos. | xz -l database.sql.xz |
| xz -v archivo... | Muestra el nombre y el porcentaje de reducción de cada archivo procesado. |
xz -dv database.sql.xzxz -v database.sql
|
Note
xz no cuenta con una opción -r equivalente a la de gzip. Para compresión
recursiva, se puede combinar con find (e.g.,
find . -type f -exec xz {} \;).
| Comando | Descripción | Ejemplo |
|---|---|---|
| pigz archivo... | Comprime archivos en formato GZIP de forma paralela (más rápida). | pigz -9 database.sql |
| pigz -d archivo... | Descomprime archivos en formato pigz/gzip. | pigz -d database.sql.gz |
| pigz -k archivo... | Conserva el archivo original tras la compresión. | pigz -k database.sql |
| pbzip2 archivo... | Comprime archivos en formato BZIP2 de forma paralela (más rápida). | pbzip2 -9 largefile.txt |
| pbzip2 -d archivo... | Descomprime archivos en formato pbzip2/bzip2. | pbzip2 -d largefile.txt.bz2 |
| pbzip2 -k archivo... | Conserva el archivo original tras la compresión. | pbzip2 -k largefile.txt |
| compress archivo... | Comprime archivos en formato .Z utilizando el algoritmo LZW. |
compress datos.txt |
| uncompress archivo... | Descomprime archivos en formato .Z. |
uncompress datos.txt.Z |
| lzop archivo... | Comprime archivos utilizando el algoritmo LZO (alta velocidad). | lzop -9 video.mp4 |
| lz4 archivo... | Comprime archivos con LZ4 (compresión ultrarrápida). | lz4 archivo.bin |
| zstd archivo... | Comprime archivos con Zstandard (balance entre velocidad y ratio). | zstd -19 backup.img |
El archivado de archivos consiste en empaquetar una serie de archivos y directorios dentro de un único archivo. El archivado por sí solo no comprime los archivos. Al desempaquetar el archivo, se recuperan los archivos originales.
La utilidad GNU tar o simplemente tar es una utilidad de archivado
(archiving) que permite crear y operar con archivos (archives) en formato
TAR. Un archivo TAR frecuentemente tiene la extensión .tar.
La utilidad tar se puede integrar con utilidades de compresión para comprimir archivos TAR o desempaquetar archivos TAR comprimidos (e.g., GZIP).
Note
tar proviene de Tape ARchive. Por muchos años, los respaldos se solían mantener en tapes (cintas) debido a que eran menos costosos que otros tipos de almacenamiento.
tar { A|c|d|r|t|u|x } [ opciones ] { archivo-tar } { archivo|directorio ...}
Donde archivo-tar puede ser un archivo TAR comprimido en otro formato, por
ejemplo GZIP (e.g., archivo.tar.gz).
Note
Por razones de compatibilidad históricas, tar es una de las utilidades que
pueden aceptar algunas opciones sin el guión -. Los siguientes comandos son
equivalentes:
admin@server:~$ tar -cf archivo.tar archivo1 carpeta1
admin@server:~$ tar cf archivo.tar archivo1 carpeta1| Comando | Descripción | Ejemplo |
|---|---|---|
| tar -cf archivo.tar archivo... | Crea un archivo TAR. | tar -cf backup.tar Documents/ |
| tar -xf archivo.tar | Extrae todos los archivos de un archivo TAR. | tar -xf backup.tar |
| tar -xf archivo.tar archivo... | Extrae archivos específicos de un archivo TAR. | tar -xf backup.tar file1.txt |
| tar -xf archivo.tar -C directorio | Extrae el contenido en el directorio especificado. | tar -xf backup.tar -C /tmp/ |
| tar -tf archivo.tar | Lista el contenido del archivo TAR. | tar -tf backup.tar |
| tar -rf archivo.tar archivo... | Añade archivos a un archivo TAR existente. | tar -rf backup.tar newfile.txt |
| tar -uf archivo.tar archivo... | Actualiza archivos en el archivo TAR. | tar -uf backup.tar Documents/ |
| tar -df archivo.tar | Compara el contenido del archivo TAR con el sistema de archivos. | tar -df backup.tar |
| tar --delete -f archivo.tar archivo... | Elimina archivos del archivo TAR. | tar --delete -f backup.tar oldfile.txt |
| Opción | Descripción | Ejemplo |
|---|---|---|
| -v | Activa el modo verboso (muestra los archivos procesados). | tar -cvf backup.tar Documents/ |
| -p | Conserva los permisos originales de los archivos. | tar -cpf backup.tar /etc/ |
| --exclude | Excluye los archivos o patrones especificados. | tar -cf backup.tar --exclude='*.tmp' Documents/ |
| --wildcards | Permite el uso de comodines al extraer archivos. | tar -xf backup.tar --wildcards '*.txt' |
| Comando | Descripción | Ejemplo |
|---|---|---|
| tar -czf archivo.tar.gz archivo... | Crea un archivo TAR y lo comprime con gzip. |
tar -czf proyecto.tar.gz src/ |
| tar -cjf archivo.tar.bz2 archivo... | Crea un archivo TAR y lo comprime con bzip2. |
tar -cjf proyecto.tar.bz2 src/ |
| tar -cJf archivo.tar.xz archivo... | Crea un archivo TAR y lo comprime con xz. |
tar -cJf proyecto.tar.xz src/ |
| tar -xzf archivo.tar.gz | Extrae un archivo TAR comprimido con gzip. |
tar -xzf proyecto.tar.gz |
| tar -xjf archivo.tar.bz2 | Extrae un archivo TAR comprimido con bzip2. |
tar -xjf proyecto.tar.bz2 |
| tar -xJf archivo.tar.xz | Extrae un archivo TAR comprimido con xz. |
tar -xJf proyecto.tar.xz |
| tar -tzf archivo.tar.gz | Lista el contenido de un archivo TAR comprimido con gzip. |
tar -tzf proyecto.tar.gz |
| tar -tjf archivo.tar.bz2 | Lista el contenido de un archivo TAR comprimido con bzip2. |
tar -tjf proyecto.tar.bz2 |
| tar -tJf archivo.tar.xz | Lista el contenido de un archivo TAR comprimido con xz. |
tar -tJf proyecto.tar.xz |
| tar -I "gzip -9" -cf archivo.tar.gz archivo... | Crea un archivo TAR y lo comprime con gzip en nivel 9. |
tar -I "gzip -9" -cf backup.tar.gz /etc/ |
| tar -I pigz -cf archivo.tar.gz archivo... | Crea un archivo TAR y lo comprime con pigz (paralelo). |
tar -I pigz -cf backup.tar.gz Documents/ |
| tar -I pbzip2 -cf archivo.tar.bz2 archivo... | Crea un archivo TAR y lo comprime con pbzip2 (paralelo). |
tar -I pbzip2 -cf backup.tar.bz2 src/ |
| Opción | Descripción |
|---|---|
| -a, --auto-compress | Determina la utilidad de compresión a partir de la extensión del archivo. |
| -I, --use-compress-program=COMMAND | Filtra los datos a través de la utilidad especificada en COMMAND. |
| -j, --bzip2 | Filtra el archivo a través de bzip2. |
| -J, --xz | Filtra el archivo a través de xz. |
| --lzip | Filtra el archivo a través de lzip. |
| --lzma | Filtra el archivo a través de lzma. |
| --lzop | Filtra el archivo a través de lzop. |
| -z, --gzip | Filtra el archivo a través de gzip. |
| -Z, --compress | Filtra el archivo a través de compress. |
| --zstd | Filtra el archivo a través de zstd. |
Note
Respecto a la utilidad tar, véase la sección:
Comandos de Archivado y Compresión de tar
La utilidad zip es una utilidad de archivado (archiving) con compresión
integrada que permite crear y operar con archivos (archives) en formato ZIP.
Un archivo ZIP frecuentemente tiene la extensión .zip.
zip [ opciones ] { archivo-zip } { archivo|directorio ... }
| Comando | Descripción | Ejemplo |
|---|---|---|
| zip archivo.zip archivo... | Crea un archivo ZIP con los archivos especificados. | zip docs.zip *.txt |
| zip -r archivo.zip directorio/ | Crea un archivo ZIP de forma recursiva desde un directorio. | zip -r proyecto.zip src/ |
| zip -# archivo.zip archivo... | Comprime con nivel específico (0-9). | zip -9 docs.zip *.txt |
| zip -e archivo.zip archivo... | Crea un archivo ZIP protegido con contraseña. | zip -e secure.zip datos.txt |
| zip -u archivo.zip archivo... | Actualiza archivos en el archivo ZIP. | zip -u docs.zip nuevo.txt |
| zip -d archivo.zip archivo... | Elimina archivos del archivo ZIP. | zip -d docs.zip viejo.txt |
| Comando | Descripción | Ejemplo |
|---|---|---|
| unzip archivo.zip | Extrae todos los archivos del archivo ZIP. | unzip proyecto.zip |
| unzip archivo.zip archivo... | Extrae archivos específicos del archivo ZIP. | unzip docs.zip readme.txt |
| unzip -d directorio archivo.zip | Extrae el contenido en el directorio especificado. | unzip -d /tmp/ docs.zip |
| unzip -l archivo.zip | Lista el contenido del archivo ZIP sin extraer. | unzip -l proyecto.zip |
| unzip -t archivo.zip | Verifica la integridad del archivo ZIP. | unzip -t proyecto.zip |
7-Zip (invocado como 7z en Linux) es una utilidad de archivado con
compresión integrada de código abierto. Soporta múltiples formatos tanto para
creación (e.g., .7z, .zip, .tar) como para extracción (e.g., .rar,
.gz, .iso). Su formato nativo .7z utiliza el algoritmo LZMA/LZMA2 y ofrece
una de las mayores tasas de compresión disponibles.
7z { a|d|e|l|t|u|x } { archivo.7z } [ archivo|directorio ... ] [ opciones ]
| Comando | Descripción | Ejemplo |
|---|---|---|
| 7z a archivo.7z archivo... | Crea un archivo 7Z con los archivos especificados. | 7z a backup.7z *.txt |
| 7z a -r archivo.7z directorio/ | Crea un archivo 7Z de forma recursiva desde un directorio. | 7z a -r proyecto.7z src/ |
| 7z a -mx=# archivo.7z archivo... | Comprime con nivel específico (0-9). | 7z a -mx=9 docs.7z *.pdf |
| 7z a -p archivo.7z archivo... | Crea un archivo 7Z protegido con contraseña. | 7z a -p secure.7z datos.txt |
| 7z a -t formato archivo... | Crea un archivo en el formato especificado. | 7z a -tzip docs.zip *.txt |
| 7z x archivo.7z | Extrae todos los archivos conservando la estructura de directorios. | 7z x proyecto.7z |
| 7z e archivo.7z | Extrae todos los archivos en el directorio actual. | 7z e backup.7z |
| 7z x archivo.7z -o directorio | Extrae el contenido en el directorio especificado. | 7z x backup.7z -o/tmp/ |
| 7z l archivo.7z | Lista el contenido del archivo 7Z. | 7z l proyecto.7z |
| 7z t archivo.7z | Verifica la integridad del archivo 7Z. | 7z t backup.7z |
| 7z u archivo.7z archivo... | Actualiza archivos en el archivo 7Z. | 7z u docs.7z nuevo.txt |
| 7z d archivo.7z archivo... | Elimina archivos del archivo 7Z. | 7z d docs.7z viejo.txt |
RAR (Roshal ARchive) es un formato de archivado con compresión propietario
desarrollado por Eugene Roshal. En Linux, se distribuyen dos utilidades: rar
(creación y extracción, requiere licencia comercial) y unrar (solo extracción,
versión libre). Utiliza su propio algoritmo de compresión y soporta
funcionalidades como archivos multi-volumen y recuperación de datos ante
corrupción.
rar { a|d|e|l|t|u|x } [ opciones ] { archivo.rar } [ archivo|directorio ... ]
| Comando | Descripción | Ejemplo |
|---|---|---|
| rar a archivo.rar archivo... | Crea un archivo RAR con los archivos especificados. | rar a backup.rar *.txt |
| rar a -r archivo.rar directorio/ | Crea un archivo RAR de forma recursiva desde un directorio. | rar a -r proyecto.rar src/ |
| rar a -m# archivo.rar archivo... | Comprime con nivel específico (0-5). | rar a -m5 docs.rar *.pdf |
| rar a -hp archivo.rar archivo... | Crea un archivo RAR protegido con contraseña. | rar a -hp secure.rar datos.txt |
|
rar x archivo.rar unrar x archivo.rar |
Extrae todos los archivos conservando la estructura de directorios. | rar x proyecto.rar |
|
rar e archivo.rar unrar e archivo.rar |
Extrae todos los archivos en el directorio actual. | rar e backup.rar |
| rar x archivo.rar directorio/ | Extrae el contenido en el directorio especificado. | rar x backup.rar /tmp/ |
|
rar l archivo.rar unrar l archivo.rar |
Lista el contenido del archivo RAR. | rar l proyecto.rar |
|
rar t archivo.rar unrar t archivo.rar |
Verifica la integridad del archivo RAR. | rar t backup.rar |
| rar u archivo.rar archivo... | Actualiza archivos en el archivo RAR. | rar u docs.rar nuevo.txt |
| rar d archivo.rar archivo... | Elimina archivos del archivo RAR. | rar d docs.rar viejo.txt |
Note
unrar es la versión libre para extraer archivos RAR, mientras que rar
requiere licencia comercial para crear archivos.
| Formato | Velocidad | Ratio | Uso recomendado |
|---|---|---|---|
| gzip | Rápida | Bueno | Uso general, compatibilidad |
| pigz | Muy rápida | Bueno | gzip paralelo, sistemas multi-núcleo |
| bzip2 | Lenta | Mejor | Archivos grandes, mejor compresión |
| pbzip2 | Rápida | Mejor | bzip2 paralelo, sistemas multi-núcleo |
| xz | Muy lenta | Excelente | Distribución de software |
| lz4 | Muy rápida | Regular | Compresión en tiempo real |
| zstd | Rápida | Muy bueno | Balance moderno velocidad/ratio |
| 7z | Lenta | Excelente | Máxima compresión, múltiples formatos |
| rar | Media | Muy bueno | Archivos multimedia, recuperación |
| zip | Rápida | Bueno | Compatibilidad universal |
En Linux existen múltiples utilidades de archivado y compresión. Es poco
probable que sea necesario utilizar todas las mencionadas anteriormente. Las más
recomendadas para aprender son tar, gzip, bzip2 y xz, ya que
corresponden a los formatos más extendidos en entornos Linux.
Utilidades como 7z, rar y zip son más comunes en entornos Windows. En
Linux, generalmente se utilizan al trabajar con archivos descargados en dichos
formatos, dado que los programas de Windows no suelen incluir soporte nativo
para formatos como gzip, bzip2 o xz.
No es necesario memorizar cada comando y sus opciones. Se recomienda aprender
las opciones esenciales y consultar la documentación oficial (e.g., -h,
--help, man pages) cuando sea necesario.
-
GoalKicker (s.f.). Chapter 8: File Compression with 'tar' command. Linux Notes for Professionals (pp. 30-31). https://goalkicker.com/LinuxBook
-
Shotts, W. (2019). Archiving and Backup. The Linux Command Line (2nd ed., pp. 209-223). No Starch Press.
-
Akamai (s.f.). gzip Command. Operating Systems Fundamentals. https://www.coursera.org/learn/akamai-operating-systems/supplement/ggSx5/gzip-command
-
Akamai (s.f.). tar Command. Operating Systems Fundamentals. https://www.coursera.org/learn/akamai-operating-systems/supplement/SJqPO/tar-command
-
Akamai (s.f.). unzip Command. Operating Systems Fundamentals. https://www.coursera.org/learn/akamai-operating-systems/supplement/IRqxZ/unzip-command
- Definición y Estructura de un Shell
- Los Diferentes Tipos de Shell
- Definición y Sintaxis de un Comando
- Variables, Alias y Funciones
- Comandos de Utilidad y Consulta
- Linux como Sistema Multiusuario
- Introducción a los Usuarios y Grupos
- Gestión de Usuarios
- Gestión de Grupos
- Gestión de Contraseñas
- Búsqueda de Información de Usuarios y Grupos con
getent
- Atributos de Archivos: Propiedad y Permisos de los Archivos
- Cambio de Propiedad y Permisos
umask: Permisos Predeterminados de Archivos- Cambio de Identidad y Privilegios
- Gestión de Paquetes (Package Management)
- Compresión y Archivado de Archivos
- Optimización y Conversion de Archivos