Linux Adictos Isaac  

Todos los secretos de la compresión en GNU/Linux

Tuberías de compresión

Volvemos al problema de siempre que se transforma en una ventaja para muchos usuarios avanzados de GNU/Linux y es la gran cantidad de alternativas o posibilidades disponibles. Esto para los más inexpertos puede resultar un problema al no saber bien cuál elegir, pero como digo, tener más posibilidades o la flexibilidad nunca es algo malo sino todo lo contrario. En este caso os hablaremos de los algoritmos y procedimientos de compresión y descompresión que existen en nuestra plataforma favorita para que los veas de otra forma y no como un gran lío al no saber cuál es la mejor opción en tu caso…

Lo cierto es que no solo existen herramientas tan usadas como tar con las que podemos crear empaquetados que además se les puede añadir algún tipo de compresión como estamos acostumbrados a ver en los famosos tarballs de los que ya hemos hablado en LxA en muchas ocasiones. También nos encontraremos con variantes de herramientas tan triviales y frecuentes como grep para buscar dentro de ficheros comprimidos como es el caso de bzfgrep, o incluso otras como less y more que también tienen sus variantes para ficheros comprimidos como lo son bzless y bzmore. Para verlas todas solo tenemos que echar un vistazo a la salida del siguiente comando:


apropos compress

Algoritmos y pruebas:

Entre todos los algoritmos de compresión sin pérdidas disponibles en Linux para comprimir y descomprimir datos tenemos gran cantidad de opciones. Para conseguir pruebas del tiempo que se tarda en comprimir con uno u otro algoritmo de compresión o cuánto se tarda en descomprimirlo, te sugiero que hagas pruebas tú mismo. Puedes usar el comando time para eso, el cuál te arrojará el tiempo que se ha tomado para el proceso de compresión y descompresión. Por ejemplo, si vas a usar la herramienta zip para comprimir un fichero llamado prueba:


time zip prueba.zip prueba

Eso arrojaría el tiempo usado, pero si lo que quieres es ver el tamaño del fichero generado, puedes probar a comprimir un mismo fichero con diferentes algoritmos y herramientas de compresión y una vez tengas todos los ficheros comprimidos en un directorio con un simple comando para listar comprobar el tamaño que ocupa cada uno:


ls -l

Si lo prefieres también puedes hacer uso de otras herramientas para comparar ficheros comprimidos como por ejemplo con algunas variantes de la herramienta diff:


xzdiff [opciones] fichero1 fichero2

lzdiff [opciones] fichero 1 fichero2

Si quieres ver gráficas sobre el tamaño y la velocidad de los algoritmos, puedes visitar este otro enlace.

Herramientas de compresión:

En cuanto a las herramientas disponibles tenemos muchas de ellas, algunas con interfaz gráfica para los más novatos y que simplemente tendremos que lidiar con una sencilla e intuitiva GUI para realizar las compresiones y descompresiones como es el caso de PeaZip, o 7zip,… etc. Concretamente el primero es capaz de trabajar con varios formatos, concretamente más de 180 de ellos. Pero si eres de los que aún le gusta trabajar con el terminal, entonces tendrás gran cantidad de herramientas que seguro conoces:

  • zip y unzip: es una buena opción si lo que quieres es ficheros portables a otros sistemas operativos, ya que vas a encontrar herramientas para trabajar con estos ficheros en sistemas Microsoft Windows y también en macOS además de otros. Por ejemplo, para comprimir un fichero o directorio llamado prueba y luego descomprimirlo:

zip prueba.zip prueba

unzip prueba.zip

  • gzip: es la mejor si lo que quieres es portabilidad simplemente entre sistemas operativos Unix/Linux. Quizás la tasa de compresión sea casi idéntica a zip, tal vez mínimamente mejor, pero no vas a encontrar mucha diferencia en el tamaño de ficheros bajo zip o gzip. Para comprimir y descomprimir con esta herramienta podemos usar dos opciones en el caso de la descompresión y son la opción -d o directamente usar el alias gunzip:

gzip prueba

gzip -d prueba.gz

gunzip prueba.gz

  • bzip2: igual que el anterior, este algoritmo está muy presente en sistemas operativos Unix/Linux, aunque va a tardar un poco más en los procesos de compresión y descompresión que en el caso de gzip. En este caso la demora no se va a traducir en una tasa de compresión superior como en el caso de xz, ya que los ficheros comprimidos bajo bzip2 van a ocupar un poco más que los gzip. Por eso se recomienda evitar bzip2 y optar mejor por xz o gzip. Aunque todo dependerá un poco del tipo de fichero que intentes comprimir… Por ejemplo:

bzip2 prueba

bzip2 -d prueba.bz2

  • xz: es el formato preferido para tamaños de fichero grandes, ya que ofrece las mejores tasas de compresión, pero también es verdad que tardará más en completar una compresión o descompresión. Es bastante más nuevo que los anteriores, así que puedes encontrarte con distros más primitivas o sistemas Unix viejos que no tengan una herramienta para éste. Ejemplos:

xz prueba

xz -d prueba.xz

  • unrar y rar: también podemos trabajar con formatos RAR en Linux gracias a estas herramientas, aunque no es tan popular en el caso de sistemas *nix como los anteriores… En este caso podemos optar por:

rar a prueba.rar prueba

unrar e prueba.rar

  • compress y uncompress: y aunque se está perdiendo el uso de compress y no sea tan popular como los anteriores, tampoco me gustaría pasar por alto esta herramienta. Sirve para comprimir ficheros con extensión .Z y lo hace gracias a un algoritmo Lempel-Ziv modificado. Por ejemplo:

compress -v prueba

uncompress prueba.Z

Si lo que quieres es trabajar directamente con la herramienta tar, también podrás empaquetar y comprimir a la vez los ficheros al igual que desempaquetarlos y descomprimirlos. En este caso podemos pasarle las opciones del tipo de algoritmo a emplear directamente a tar. Pero antes de nada debes saber que con la opción c creamos un empaquetado y con la opción x lo extraemos. Pore ejemplo:


tar czvf prueba.tar.gz prueba

tar xzvf prueba.tar.gz

Como ves hemos usado las opciones zvf que son para indicar el tipo de algoritmo de compresión z (en este caso gzip), v para el modo verbose que arroje información de lo que está haciendo, y f para indicar el fichero con el que trabajar… Pues bien, si cambiamos esa z por otra letra correspondiente a otro tipo de algoritmo podremos alterar el tipo de compresión aplicada al tarball:

Opción Algoritmo Extensión
z gzip .tar.gz
j bzip2 .tar.bz2
J xz .tar.xz
lzip zip .tar.lz
lzma lzma .tar.lzma

*Por supuesto todos los anteriores comandos tienen opciones interesantes que te invito a descubrir usando man, algunas muy necesarias como las de recursividad, etc.

No olvides dejar tus comentarios

El artículo Todos los secretos de la compresión en GNU/Linux ha sido originalmente publicado en Linux Adictos.

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.