Archivar, comprimir, desempaquetar y descomprimir archivos utilizando tar, star, gzip y bzip2

Este objetivo a primera vista parece muy simple, y si lo es. Pero como un futuro administrador de sistemas linux usted debe dominar este tema.

A contuniacion explicaremos con ejemplos basicos como vencer este objetivo.

Para comenzar vamos a ver como comprimimos un archivo:

[root@rhcsa1 ~]# pwd 
/root
[root@rhcsa1 ~]# ls -l anaconda-ks.cfg 
-rw-------. 1 root root 2320 May 29 13:23 anaconda-ks.cfg
[root@rhcsa1 ~]# gzip anaconda-ks.cfg 
[root@rhcsa1 ~]# ls -l anaconda-ks.cfg.gz 
-rw-------. 1 root root 1236 May 29 13:23 anaconda-ks.cfg.gz
[root@rhcsa1 ~]#

En el ejemplo anterior comprimimos utilizando el comando gzip, el cual crea un gz. Ahora vamos a ver como crear un bz2

[root@rhcsa1 ~]# pwd
/root
[root@rhcsa1 ~]# ls -l initial-setup-ks.cfg 
-rw-r--r--. 1 root root 2413 May 29 13:27 initial-setup-ks.cfg
[root@rhcsa1 ~]# bzip2 initial-setup-ks.cfg 
[root@rhcsa1 ~]# ls -l initial-setup-ks.cfg.bz2 
-rw-r--r--. 1 root root 1395 May 29 13:27 initial-setup-ks.cfg.bz2
[root@rhcsa1 ~]#

Hasta este punto todo esta muy facil y simple. Pero antes de continuar vamos a ver como descomprimimos estos archivos:

[root@rhcsa1 ~]# pwd
/root
[root@rhcsa1 ~]# ls -l initial-setup-ks.cfg.bz2 anaconda-ks.cfg.gz 
-rw-------. 1 root root 1236 May 29 13:23 anaconda-ks.cfg.gz
-rw-r--r--. 1 root root 1395 May 29 13:27 initial-setup-ks.cfg.bz2
[root@rhcsa1 ~]# gunzip anaconda-ks.cfg.gz ; bunzip2 initial-setup-ks.cfg.bz2 
[root@rhcsa1 ~]# ls -l
total 8
-rw-------. 1 root root 2320 May 29 13:23 anaconda-ks.cfg
-rw-r--r--. 1 root root 2413 May 29 13:27 initial-setup-ks.cfg
[root@rhcsa1 ~]#

Como pueden ver hemos descomprimido los archivos satisfactoriamente.

Ahora vamos a utilizar las restantes herramientas de compresion que deben conocer antes de presentarse al examen de certificacion. Pero quisiera mostrarles un cuado con las opciones disponibles:

actividad opción ejemplo
descomprimir/extraer -x tar -xf paquete.tar
visualizar lo que se realiza -v tar -xvf paquete.tar
archivar/crear el directorio kernel (y subdirect.) -c tar -cvf paquete.tar kernel/
comprimiendo con bzip2 -j tar -cjvf paquete.tar.bz2 kernel/
comprimiendo con lzma -J tar -cJvf paquete.tar.lzma kernel/
comprimiendo con gzip -z tar -czvf paquete.tar.gz kernel/
comprimiendo con lzip –lzip tar -cvf paquete.tar.lz –lzip kernel/
comprimiendo con compress -Z tar -cZvf paquete.tar.Z kernel/
comprime utilizando la extensión facilitada en el nombre del fichero (ej. para bz2) -a tar -cavf paquete.tar.bz2 kernel/
muestra el contenido de un archivo tar -t tar -tvf paquete.tar.bz2 kernel/

Ahora vamos solamente a agrupar el directorio /etc. Para esto no utilizamos ningun metodo de compresion.

[root@rhcsa1 ~]# tar cf etc.tar /etc/
tar: Removing leading `/' from member names
[root@rhcsa1 ~]# ls -lh etc.tar 
-rw-r--r--. 1 root root 37M May 29 15:29 etc.tar
[root@rhcsa1 ~]#

Entonces si queremos aplicar algun metodo de compresion, entre gz y bz, solo debemos especificarlo en nuestro comando. Recuerden que pueden verificar la ayuda del sistema si tienen duda o no recuerdan la opcion correcta:

[root@rhcsa1 ~]# tar --help | grep bz
-j, --bzip2 filter the archive through bzip2
[root@rhcsa1 ~]# tar cfj etc.tar.bz2 /etc/
tar: Removing leading `/' from member names
[root@rhcsa1 ~]# ls -lh etc.tar.bz2
-rw-r--r--. 1 root root 9.5M May 29 15:31 etc.tar.bz2
[root@rhcsa1 ~]# ls -lh etc.tar
-rw-r--r--. 1 root root 37M May 29 15:29 etc.tar
[root@rhcsa1 ~]#

Como pueden ver, he mirado rapidamente la ayuda para no comenter un error en la ejecucion de mi comando. Y ahora si vemos que hay un cambio en el size.

Entonces ahora vamos a contuniar con el ejemplo del otro metodo de compresion:

[root@rhcsa1 ~]# tar --help | grep gz
-z, --gzip, --gunzip, --ungzip filter the archive through gzip
[root@rhcsa1 ~]# tar cfz etc.tar.gz /etc/
tar: Removing leading `/' from member names
[root@rhcsa1 ~]# ls -lh etc.tar.gz
-rw-r--r--. 1 root root 12M May 29 15:34 etc.tar.gz
[root@rhcsa1 ~]#

Ahora vamos a ver como podemos ver el contenido de cada archivo creado anteriormente

[root@rhcsa1 ~]# ll
total 58864
-rw-------. 1 root root 2320 May 29 13:23 anaconda-ks.cfg
-rw-r--r--. 1 root root 38604800 May 29 15:29 etc.tar
-rw-r--r--. 1 root root 9933277 May 29 15:31 etc.tar.bz2
-rw-r--r--. 1 root root 11723826 May 29 15:34 etc.tar.gz
-rw-r--r--. 1 root root 2413 May 29 13:27 initial-setup-ks.cfg
[root@rhcsa1 ~]# tar tvf etc.tar | head
drwxr-xr-x root/root 0 2018-05-29 15:13 etc/
-rw-r--r-- root/root 475 2018-05-29 12:50 etc/fstab
-rw------- root/root 0 2018-05-29 12:50 etc/crypttab
lrwxrwxrwx root/root 0 2018-05-29 12:50 etc/mtab -> /proc/self/mounts
-rw-r--r-- root/root 76 2018-05-29 15:13 etc/resolv.conf
drwxr-xr-x root/root 0 2018-05-29 12:55 etc/fonts/
drwxr-xr-x root/root 0 2018-05-29 13:11 etc/fonts/conf.d/
lrwxrwxrwx root/root 0 2018-05-29 13:10 etc/fonts/conf.d/57-dejavu-serif.conf -> /usr/share/fontconfig/conf.avail/57-dejavu-serif.conf
lrwxrwxrwx root/root 0 2018-05-29 12:54 etc/fonts/conf.d/59-liberation-sans.conf -> /usr/share/fontconfig/conf.avail/59-liberation-sans.conf
lrwxrwxrwx root/root 0 2018-05-29 13:10 etc/fonts/conf.d/65-0-madan.conf -> /usr/share/fontconfig/conf.avail/65-0-madan.conf
[root@rhcsa1 ~]# tar tvfz etc.tar.gz | head
drwxr-xr-x root/root 0 2018-05-29 15:13 etc/
-rw-r--r-- root/root 475 2018-05-29 12:50 etc/fstab
-rw------- root/root 0 2018-05-29 12:50 etc/crypttab
lrwxrwxrwx root/root 0 2018-05-29 12:50 etc/mtab -> /proc/self/mounts
-rw-r--r-- root/root 76 2018-05-29 15:13 etc/resolv.conf
drwxr-xr-x root/root 0 2018-05-29 12:55 etc/fonts/
drwxr-xr-x root/root 0 2018-05-29 13:11 etc/fonts/conf.d/
lrwxrwxrwx root/root 0 2018-05-29 13:10 etc/fonts/conf.d/57-dejavu-serif.conf -> /usr/share/fontconfig/conf.avail/57-dejavu-serif.conf
lrwxrwxrwx root/root 0 2018-05-29 12:54 etc/fonts/conf.d/59-liberation-sans.conf -> /usr/share/fontconfig/conf.avail/59-liberation-sans.conf
lrwxrwxrwx root/root 0 2018-05-29 13:10 etc/fonts/conf.d/65-0-madan.conf -> /usr/share/fontconfig/conf.avail/65-0-madan.conf
[root@rhcsa1 ~]# tar tvfj etc.tar.bz2 | head
drwxr-xr-x root/root 0 2018-05-29 15:13 etc/
-rw-r--r-- root/root 475 2018-05-29 12:50 etc/fstab
-rw------- root/root 0 2018-05-29 12:50 etc/crypttab
lrwxrwxrwx root/root 0 2018-05-29 12:50 etc/mtab -> /proc/self/mounts
-rw-r--r-- root/root 76 2018-05-29 15:13 etc/resolv.conf
drwxr-xr-x root/root 0 2018-05-29 12:55 etc/fonts/
drwxr-xr-x root/root 0 2018-05-29 13:11 etc/fonts/conf.d/
lrwxrwxrwx root/root 0 2018-05-29 13:10 etc/fonts/conf.d/57-dejavu-serif.conf -> /usr/share/fontconfig/conf.avail/57-dejavu-serif.conf
lrwxrwxrwx root/root 0 2018-05-29 12:54 etc/fonts/conf.d/59-liberation-sans.conf -> /usr/share/fontconfig/conf.avail/59-liberation-sans.conf
lrwxrwxrwx root/root 0 2018-05-29 13:10 etc/fonts/conf.d/65-0-madan.conf -> /usr/share/fontconfig/conf.avail/65-0-madan.conf
[root@rhcsa1 ~]#

Ya que el contenido del directorio es muy larga, entonces hicimos un “pipe” y mostramos con el comando head solo las primeras lineas de la salida del comando tar.

Muy bien, hasta ahora ya tenemos claro como comprimir. Pero vamos a continuar con el ejercicio para que puedan ver que mas podemos hacer. Es importante aclarar que hasta este punto hemos logrado vencer el objetivo. Pero nunca esta de mas tener mas conocimientos basicos al respecto.

Ahora vamos a realizar un ejercicio en donde agregamos un arhivo nuevo a un tar. Es importante aclarar que no es posible agregar un archivo nuevo a un tar.gz o tar.bz2.

[root@rhcsa1 ~]# echo "nuevo arvhivo" > NUEVO
[root@rhcsa1 ~]# tar --help | grep append
-A, --catenate, --concatenate append tar files to an archive
-r, --append append files to the end of an archive
-u, --update only append files newer than copy in archive
[root@rhcsa1 ~]# tar uvf etc.tar NUEVO 
NUEVO
[root@rhcsa1 ~]# tar tvf etc.tar | grep NUEVO
-rw-r--r-- root/root 14 2018-05-29 15:44 NUEVO
[root@rhcsa1 ~]#

Y como pueden ver, en la verificacion tenemos el archivo NUEVO que creamos anteriormente.

Ahora vamos a ver un ejemplo mas practico, en donde eliminaremos el archivo hosts de este servidor; y utilizaremos el que creamos al inicio para restaurar el contenido.

[root@rhcsa1 ~]# ls -l /etc/hosts
-rw-r--r--. 1 root root 158 May 29 2018 /etc/hosts
[root@rhcsa1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@rhcsa1 ~]# rm /etc/hosts
rm: remove regular file ‘/etc/hosts’? y
[root@rhcsa1 ~]# ls -l /etc/hosts
ls: cannot access /etc/hosts: No such file or directory
[root@rhcsa1 ~]# tar xfj etc.tar.bz2 -C /
[root@rhcsa1 ~]# ls -l /etc/hosts
-rw-r--r--. 1 root root 158 May 29 2018 /etc/hosts
[root@rhcsa1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@rhcsa1 ~]#

Como pueden ver el archivo eliminado fue restaurado desde el tar.bz2 que creamos al inicio. Esto aplica tambien para restaurar o descomprimir un tar.gz.

Otro ejemplo practico es que quieran descomprimirlo en otro destino, para esto solo debemos especificar el destino con la opcion “-C”

[root@rhcsa1 ~]# mkdir backup
[root@rhcsa1 ~]# tar xfz etc.tar.gz -C backup/
[root@rhcsa1 ~]# ls -ls backup/ | head
total 12
12 drwxr-xr-x. 139 root root 8192 May 29 15:13 etc
[root@rhcsa1 ~]# ls -ls backup/etc/ | head
total 1340
0 drwxr-xr-x. 3 root root 101 May 29 13:01 abrt
4 -rw-r--r--. 1 root root 16 May 29 13:22 adjtime
4 -rw-r--r--. 1 root root 1518 May 29 2013 aliases
12 -rw-r--r--. 1 root root 12288 May 29 13:27 aliases.db
0 drwxr-xr-x. 2 root root 51 May 29 13:02 alsa
4 drwxr-xr-x. 2 root root 4096 May 29 13:20 alternatives
4 -rw-------. 1 root root 541 May 29 2018 anacrontab
4 -rw-r--r--. 1 root root 55 May 29 2018 asound.conf
4 -rw-r--r--. 1 root root 1 May 29 2018 at.deny
[root@rhcsa1 ~]#

Tambien podemos comprimir utilizando o preservando el contexto de archivos de SELinux. Para esto solo agregamos un opcion a nuestro comando:

[root@rhcsa1 ~]# tar --help | grep selinux
--no-selinux Disable the SELinux context support
--selinux Enable the SELinux context support
[root@rhcsa1 ~]# tar --selinux -czf etc-selinux.tgz /etc
tar: Removing leading `/' from member names
[root@rhcsa1 ~]# ls -l etc-selinux.tgz
-rw-r--r--. 1 root root 11889610 May 29 16:05 etc-selinux.tgz
[root@rhcsa1 ~]#

Y para descomprimir pues utilizamos la misma opcion, solamente cambiamos la opcion de crear por extraer:

[root@rhcsa1 ~]# mkdir tar-selinux
[root@rhcsa1 ~]# 
[root@rhcsa1 ~]# 
[root@rhcsa1 ~]# tar --selinux -xzf etc-selinux.tgz -C tar-selinux/
[root@rhcsa1 ~]# ls -l tar-selinux/etc/ | head
total 1340
drwxr-xr-x. 3 root root 101 May 29 13:01 abrt
-rw-r--r--. 1 root root 16 May 29 13:22 adjtime
-rw-r--r--. 1 root root 1518 May 29 2018 aliases
-rw-r--r--. 1 root root 12288 May 29 13:27 aliases.db
drwxr-xr-x. 2 root root 51 May 29 13:02 alsa
drwxr-xr-x. 2 root root 4096 May 29 13:20 alternatives
-rw-------. 1 root root 541 May 29 2018 anacrontab
-rw-r--r--. 1 root root 55 May 29 2018 asound.conf
-rw-r--r--. 1 root root 1 May 29 2018 at.deny
[root@rhcsa1 ~]#

El otro metodo de compresion es star, este metodo los administradores de sistemas no lo utilizan mucho. Y a decir verdad no considero prestarle mucha atencion, pero aqui les dejo un ejemplo simple. Recuerden que para compretar este ejemplo deben tener el sistema configurado para poder instalar el paquete star

yum install -y star

Para crear un star:

star -xattr -H=exustar -c -f=directory.star directory

Y para descomprimirlo:

star -x -f=directory.star

Esto ha sido todo mis amigos, espero que les resulte facil este objetivo. Y lo puedan aplicar en el examen de certificacion y en su dia a dia.

Leave a Reply

Your email address will not be published. Required fields are marked *