martes, 10 de abril de 2018

05 - Empaquetar y Comprimir

Es muy probable que en sistemas operativos como MS-DOS o Windows hayamos utilizado programas compresores de ficheros como pueden ser arj o winzip. Estas aplicaciones almacenan un conjunto de ficheros, manteniendo la estructura jerárquica de directorios y subdirectorios, en un único fichero, y los comprimen para reducir el espacio que utilizan. Es decir, realizan dos funciones: empaquetan y comprimen.

Linux dispone de comandos diferenciados para realizar cada una de estas tareas:
  • tar realiza únicamente la función de archivar, es decir, crea un fichero que contiene a su vez uno o varios ficheros guardando la estructura de directorios.
  • gzip,bzip,compress son programas compresores que normalmente se utilizan conjuntamente con el comando tar.
Extensiones

.tar - Fichero empaquetado con tar.
.tar.gz -  Fichero tar comprimido con gzip.
.tar.bz2 - Fichero tar comprimido con bzip2.
.tar.Z - Fichero tar comprimido con compress. 
Estos comandos son de uso muy extendido, ya que la mayoría de las aplicaciones se distribuyen utilizando estos formatos.

tar

El comando tar exclusivamente realiza la función de empaquetar en un archivo un conjunto de ficheros respetando su estructura de directorios. Además, puede reconocer y conserva todas las peculiaridades del sistema de ficheros de Linux, como el propietario y grupo de los ficheros, permisos y enlaces duros y simbólicos. El formato del comando tar es el siguiente: 

tar opciones ficheroacrearoextraer ficherosaempaquetar
El comando tar tiene asociado una serie de opciones que nos permite determinar su comportamiento. La primera opción que se debe especificar es la que indica la acción que debe realizar el comando tar, pudiendo elegir entre:

  • c: Crea un fichero tar.
  • t: Lista el contenido de un fichero tar.
  • x: Extrae el contenido de un fichero tar.
  • r: Añade archivos a un fichero tar.
Las opciones más utilizadas que podemos incluir posteriormente son las siguientes:

  • v: Muestra el nombre de los ficheros que se archivan.
  • p: Conserva los permisos de los ficheros.
  • M: Para trabajar con ficheros tar multivolumen
  • f fich_tar: Nombre del fichero tar que queremos utilizar

Ejemplos

tar cvf empaqueto.tar /home
Creará un fichero denominado empaqueto.tar donde se archivarán los ficheros del directorio /home. La opción v permite visualizar una lista de los archivos que se van insertando.

tar xvf empaqueto.tar
Extraer ficheros contenidos en empaqueto.tar al directorio actual. Ojo, los ficheros antiguos se sobreescriben por defecto

tar cvf usuarios.tar /etc/group /etc/passwd
Empaquetar los ficheros group y passwd en el fichero usuarios.tar

Observación

Por defecto tar solo hará la extracción correcta de los ficheros si lo ejecutamos desde el mismo sitio desde donde se hizo el empaquetado, y por eso es muy interesante la opción -t para poder ver la ruta que se alamacenó durante el empaquetado

gzip, bzip, compress

Son programas compresores que permiten reducir el tamaño de los ficheros. Normalmente los utilizaremos para comprimir los ficheros tar, pero pueden utilizarse con cualquier fichero.

gzip: Es el más utilizado ya que ofrece un factor de compresión mayor. Su formato es el siguiente:

gzip fichero
Comprimir
gzip -9 empaqueto.tar
El factor -9 me proporciona el mayor nivel de compresión (de 1 a 9) y es el que se utiliza con más frecuencia. El fichero que obtendremos se denominará empaqueto.tar.gz

Descomprimir
gunzip empaqueto.tar.gz
bzip2 o compress son otros compresores similares a gzip con extensiones bz2 y Z respectivamente. El funcionamiento es identico y sus extractores serían
bunzip2
y uncompress 

tar+gzip, tar+bzip2

Debido a que es muy usual utilizar estos comandos para primero archivar con tar un conjunto de archivos y posteriormente comprimirlos con gzip, existen opciones del comando tar que automáticamente comprimen el fichero obtenido.

La opción z de tar automáticamente comprime con gzip. La opción j hace lo propio con bzip2

Ejemplos

tar cvfz comprimo.tar.gz /home 
Esta orden empaqueta y comprime el directorio /home

tar xvfz comprimo.tar.gz /home 
Esta orden desempaqueta y descomprime el directorio /home