Como no todo viene con manual o muchas veces se nos dificulta encontrar documentación para algunos usuarios, y más si se trata de un nuevo sistema operativo, tal es el caso de Linux. Si se sabe utilizar, la terminal es una herramienta muy poderosa para cualquier usuario, y no necesariamente se necesita ser un experto, solo necesitamos conocer algunos comandos o los más básicos, como los comandos para comprimir y descomprimir directorios completos incluyendo todos los archivos y carpetas que se encuentren dentro de estos.
Comprimir un directorio completo o un archivo
La forma más básica de comprimir directorios es usando el comando tar
que ya viene instalado en todos los sistemas Linux:
tar -zcf archivo-2080-04-01.tar.gz /home/usuario/directorio
# o bien
tar -zcf archivo-2080-04-01.tar.gz /home/usuario/archivo.txt
También podemos usar el siguiente comando que es exactamente lo mismo que el anterior, solo que usando los parámetros completos:
tar --gzip --create --file=archivo-2080-04-01.tar.gz /home/usuario/directorio
El archivo resultante quedará comprimido y localizado en el directorio en el que nos encontremos, por ejemplo, si entramos con el usuario root desde la terminal, e inmediatamente ejecutamos el comando anterior, el fichero archivo-2080-04-01.tar.gz quedará en el directorio /root, que es el directorio por defecto en el que estamos al acceder como usuario root.
Los parámetros del comando usado son:
- z, --gzip: utiliza la herramienta gzip para comprimir.
- c, --create: crea un nuevo archivo, en este caso el contenedor tar, que por defecto no tiene compresión.
- f, --file=: se indica que el siguiente parámetro usado será el archivo de salida, en este caso el archivo es tar.gz.
La opción verbose
o -v
nos permite estar al tanto de lo que está haciendo el comando, sin embargo, la operación puede tardar mucho más y es contraproducente cuando manejamos miles de archivos.
- v, --verbose: es una opción que hace que todo el proceso del comando sea mostrado con más detalle.
Para poder comprimir un directorio o archivo y elegir la ubicación tenemos dos opciones:
1. La primera es navegar con el comando cd
hacia el directorio en el que queremos que el archivo sea creado.
cd /directorio-de-copias-de-seguridad/
tar -zcf archivo-2080-04-01.tar.gz /home/usuario/directorio
2. La segunda opción es cambiar la ruta del archivo, colocando el comando de la siguiente manera, usando rutas absolutas en el origen y destino:
tar -zcf /home/usuario/archivo-2080-04-01.tar.gz /home/usuario/directorio
Elegir el software de compresión
Lo anterior fue un uso muy básico utilizando el algoritmo de compresión gzip, sin embargo, el comando tar soporta múltiples algoritmos. Se usan diferentes algoritmos porque cada uno tiene diferentes niveles de compresión, en otras palabras cada uno da un tamaño diferente de archivo final, y al mismo tiempo cada algoritmo tiene su propia velocidad.
Si ejecutamos tar --help
se mostrarán las opciones del comando, y exactamente en la sección Opciones de compresión se muestran las opciones que usaremos.
Opción | Descripción |
---|---|
-j, --bzip2 | bzip2 |
-J, --xz | xz |
--lzip | lzip |
--lzma | lzma |
--lzop | lzop |
--no-auto-compress | |
--zstd | zstd |
-z, --gzip | gzip |
-Z, --compress | LZA |
-a, --auto-compress | Se usa para elegir el algoritmo automáticamente basado en la extensión del archivo. |
-I, --use-compress-program= | Se usa un programa externo existente en nuestro sistema. |
Los algoritmos de compresión pueden variar dependiendo de la versión de tar
y de las utilidades que se encuentren instaladas en nuestro sistema.
Para usar un algoritmo de compresión distinto al predeterminado, seguimos las instrucciones que se mencionan al principio, solo que quitamos la opción -z
o --gzip
y las reemplazamos por el algoritmo que deseamos.
Por ejemplo, vamos a crear un archivo comprimido de un directorio con el algoritmo zstd.
tar --zstd --create --file=/home/archivo-comprimido.tar.zst /home/usuario/directorio/
# o con opciones abreviadas
tar --zstd -cf /home/archivo-comprimido.tar.zst /home/usuario/directorio/
Comprimir usando un algoritmo que no se encuentre en la lista, pero que se encuentre instalado en nuestro sistema, ejecutamos lo siguiente.
tar --use-compress-program=brotli -cf /home/archivo-comprimido.tar.br /home/usuario/directorio/
Para que el comando anterior funcione correctamente, debe aceptar la opción -d
, que es usada comúnmente para descomprimir.
Comprimir basándonos automáticamente en la extensión del archivo. Aquí solo agregamos la opción -a
y quitamos cualquier indicio del algoritmo de las opciones para que se detecte del mismo archivo.
tar -acf /home/archivo-comprimido.tar.gz /home/usuario/directorio/
¿Por qué se usa gzip de manera predeterminada?
gzip es ampliamente utilizado, no se usa por ser el mejor, sino por ser muy rápido y por ofrecer una tasa de compresión aceptable.
¿Cuál es el mejor compresor en general?
Se ha mostrado con diferentes pruebas que zstd ofrece un equilibrio entre tiempo de compresión, tasa de compresión y tamaño comprimido. Llamado originalmente Zstandard, fue creado por Facebook.
Elegir el nivel de compresión
Tar de manera predeterminada usa niveles de compresión automáticos, esto quiere decir que usa los niveles predeterminados de cada compresor.
Para poder elegir un nivel personalizado tenemos que usar tar únicamente para archivar los archivos y directorios, y después continuamos comprimiendo el archivo resultante. Esto lo podemos hacer por pasos o usando tuberías (GNU pipe).
tar --create example.txt | zstd --ultra > example.tar.zst
# o bien
tar -c example.txt | zstd -19 > example.tar.zst
Hay que tener en cuenta que cada programa tiene diferentes niveles de compresión y diferentes opciones. Al momento de descomprimir usamos la misma técnica que al no usar un nivel de compresión personalizado.
¿Por qué se usa tar en lugar de usar un compresor directamente?
La utilidad tar se usa originalmente para empaquetar archivos y directorios en un solo archivo, conservando así su estructura. Esto nos permite transferir, comprimir y almacenar de una manera eficiente. El comando tar no tiene ningún tipo de compresión, este solo funciona como un encapsulado, por ello se usa en conjunto con sus opciones de compresión.
Otra razón para usar tar, es que la mayoría de algoritmos de compresión funcionan a nivel de archivo individual, y para poder comprimir varios a la vez tendríamos que navegar dentro de directorios, de archivo por archivo. Por ejemplo, al ejecutar la opción de ayuda del comando brotli
del algoritmo Brotli, se mostrarán las opciones para comprimir un solo archivo y no múltiples archivos, ni directorios.
brotli --help
Usage: brotli [OPTION]... [FILE]...
En cambio, si usamos zstd directamente, si nos permite elegir varios archivos de entrada, pero solo funciona a nivel de archivo, y no funciona dentro de subdirectorios.
Al usar tar ignoramos estas limitaciones y logramos comprimir cualquier tipo de contenido sin problema.
Descomprimir un archivo .tar.gz
En el directorio actual.
Utilizamos el siguiente comando, desde el directorio en el que se encuentre el archivo .tar.gz:
tar -zxf archivo-2080-04-01.tar.gz
Alternativa con parámetros con nombres:
tar --gunzip --extract --file=archivo-2080-04-01.tar.gz
En este comando con parámetros con nombres gunzip
es la herramienta encargada de descomprimir el contenido y --extract
indica que se extraerán los archivos del archivo que se encuentra en --file=
, y --verbose
es el nivel de detalle que el comando nos mostrará.
En una ruta personalizada.
Para elegir una ruta personalizada en donde se van a descomprimir los archivos, agregamos el parámetro:-C.
tar -zxf archivo-2080-04-01.tar.gz -C /tmp/directorio
Aunque también podemos navegar hasta el directorio destino y ejecutarlo, por ejemplo:
tar -zxf /home/usuario/archivo-2080-04-01.tar.gz
Con esto todo el contenido del archivo se va a descomprimir en el directorio actual, sin importar que el archivo .tar.gz
se encuentre en otro lugar.
Descomprimir archivo con compresor personalizado
Es bastante sencillo descomprimir archivos con algoritmos de compresión personalizados, solo debemos especificar que algoritmo tiene el archivo, exactamente igual que cuando lo comprimimos.
Por ejemplo, en el caso de un archivo comprimido con Brotli.
tar --use-compress-program=brotli -xf ex.tar.br
# metodo abreviado
tar -I brotli -xf ejemplo.tar.br
Si usamos el comando tar con la opción -x
sin especificar el tipo de compresor nos dará un error.
tar -xf ejemplo.tar.br
tar: Esto no parece un archivo tar
tar: Se sale con estado de fallo debido a errores anteriores
Por último, si no es suficiente equivocarnos con lo anterior, si usamos la opción -z
de gzip
, nos dará el siguiente error. Así que la única opción válida es la primera, especificar que algoritmo tiene el archivo.
tar -zxf ejemplo.tar.br
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now