3.1 Lección 1
Certificación: |
Linux Essentials |
---|---|
Versión: |
1.6 |
Tema: |
3 El poder de la línea de comandos |
Objetivo: |
3.1 Archivar ficheros desde la línea de comandos |
Lección: |
1 de 1 |
Introducción
La compresión consiste en reducir la cantidad de espacio que consume un conjunto de datos específicos. Generalmente se utiliza para disminuir el espacio que se necesita para almacenar un archivo y para reducir la cantidad de datos que se envían a través de una conexión de red.
La compresión funciona reemplazando patrones repetitivos en los datos. Supongamos que tienes una novela. Algunas palabras son extremadamente comunes pero tienen múltiples caracteres, como la palabra “el”. Podría reducir el tamaño de la novela significativamente si reemplazara estas palabras y sus patrones comunes en un solo carácter. Por ejemplo, reemplace “el” con una letra griega que no se usa en ninguna otra parte del texto. Tomando el ejemplo anterior, se puede decir que los algoritmos de compresión tratan los datos de manera similar, pero de una forma más compleja.
La compresión tiene dos variantes, sin pérdida (lossless) y con pérdida (lossy). La información comprimida con un algoritmo "lossless", puede ser descomprimida en su forma original. Los datos comprimidos con un algoritmo "lossy" no pueden ser recuperados. Los algoritmos "lossy" se utilizan generalmente en imágenes, video y audio donde la pérdida de calidad es imperceptible para los seres humanos, irrelevante para el contexto o cuando se aprovecha una mejora en el rendimiento de la red.
Las herramientas de archivo (Archiving tools) se utilizan para agrupar archivos y directorios en un solo fichero. Algunos usos comunes son las copias de seguridad, la agrupación del código fuente y la retención de datos.
El archivo y la compresión se usan comúnmente juntos. Incluso algunas herramientas de archivo comprimen su contenido de forma predeterminada; otros pueden comprimir opcionalmente sus contenidos. Si desea comprimir el contenido se deben usar algunas herramientas de archivo junto con herramientas de compresión independientes.
La herramienta tar
es la más común para archivar información en Linux. La mayoría de las distribuciones de Linux incluyen la versión GNU de tar
, por lo que se tratará en esta lección. Por sí solo este programa archiva información sin usar compresión.
Existen muchas herramientas de compresión en Linux, algunas de las más comunes son bzip2
, gzip
, y xz
. Es posible encontrar las tres en la mayoría de los sistemas, aunque pueden existir sistemas antiguos o muy mínimos donde xz
o bzip
no están instalados. Los usuarios regulares de Linux manejan archivos comprimidos con cualquiera de las tres herramientas, las tres usan algoritmos diferentes, por lo que un archivo comprimido con una herramienta no puede ser descomprimido por otra. La compresión trae consigo algunas desventajas; si se desea una tasa de compresión alta, tomará más tiempo para comprimir y descomprimir el archivo, ya que se requiere más procesamiento para encontrar patrones más complejos. Todas estas herramientas comprimen información pero no pueden crear archivos que contengan múltiples ficheros.
Las herramientas independientes de compresión generalmente no están disponibles en sistemas Windows. Las herramientas de compresión y archivado de Windows suelen estar juntas. Es importante tener esto en cuenta si se tienen sistemas Linux y Windows que necesiten compartir archivos.
Las herramientas zip
y unzip
están disponibles en sistemas Linux para manejar archivos .zip
que comúnmente son usados en sistemas Windows. Estas herramientas no están instaladas por defecto en todos los sistemas, por lo que si se desea usarlas, necesitará realizar la instalación. Afortunadamente, se encuentran (típicamente) en los repositorios de las distribuciones.
Herramientas de compresión
La cantidad de espacio en disco que se ahorra al comprimir los archivos depende de varios factores: la naturaleza de los datos que se comprimen, el algoritmo utilizado para comprimir los datos y el nivel de compresión. No todos los algoritmos admiten diferentes niveles de compresión.
A continuación se configuran algunos archivos de prueba para comprimir:
$ mkdir ~/linux_essentials-3.1 $ cd ~/linux_essentials-3.1 $ mkdir compression archiving $ cd compression $ cat /etc/* > bigfile 2> /dev/null
Se crean tres copias de este archivo:
$ cp bigfile bigfile2 $ cp bigfile bigfile3 $ cp bigfile bigfile4 $ ls -lh total 2.8M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile2 -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile3 -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile4
Ahora se comprimen los archivos con cada una de las herramientas de compresión mencionadas:
$ bzip2 bigfile2 $ gzip bigfile3 $ xz bigfile4 $ ls -lh total 1.2M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 170K Jun 23 08:08 bigfile2.bz2 -rw-r--r-- 1 emma emma 179K Jun 23 08:08 bigfile3.gz -rw-r--r-- 1 emma emma 144K Jun 23 08:08 bigfile4.xz
Compare los tamaños de los archivos comprimidos con el archivo sin comprimir denominado bigfile
. Observe también cómo las herramientas de compresión agregaron extensiones a los nombres de archivo y eliminaron los archivos sin comprimir.
Para descomprimir los archivos se utilizan bunzip2
, gunzip
, o unxz
:
$ bunzip2 bigfile2.bz2 $ gunzip bigfile3.gz $ unxz bigfile4.xz $ ls -lh total 2.8M -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile2 -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile3 -rw-r--r-- 1 emma emma 712K Jun 23 08:20 bigfile4
Nuevamente se observa que el archivo comprimido se borra una vez que se descomprime.
Algunas herramientas soportan diferentes niveles de compresión, normalmente un nivel más alto requiere más memoria y ciclos de CPU, pero se obtiene un archivo comprimido más pequeño; lo contrario es cierto para un nivel más bajo. A continuación se muestra un ejemplo utilizando xz
y gzip
:
$ cp bigfile bigfile-gz1 $ cp bigfile bigfile-gz9 $ gzip -1 bigfile-gz1 $ gzip -9 bigfile-gz9 $ cp bigfile bigfile-xz1 $ cp bigfile bigfile-xz9 $ xz -1 bigfile bigfile-xz1 $ xz -9 bigfile bigfile-xz9 $ ls -lh bigfile bigfile-* * total 3.5M -rw-r--r-- 1 emma emma 712K Jun 23 08:08 bigfile -rw-r--r-- 1 emma emma 205K Jun 23 13:14 bigfile-gz1.gz -rw-r--r-- 1 emma emma 178K Jun 23 13:14 bigfile-gz9.gz -rw-r--r-- 1 emma emma 156K Jun 23 08:08 bigfile-xz1.xz -rw-r--r-- 1 emma emma 143K Jun 23 08:08 bigfile-xz9.xz
No es necesario descomprimir un archivo cada vez que se necesite. Las herramientas de compresión, normalmente incluyen versiones especiales de aplicativos que son usados para leer archivos de texto, por ejemplo, gzip
incluye una versión de cat
, grep
, diff
, less
, more
, etc.
Para gzip
, las herramientas utilizan el prefijo z
, mientras que el prefijo bz
se usa para bzip2
y xz
para xz
. A continuación se muestra un ejemplo del uso de zcat
para mostrar el contenido de un archivo comprimido con gzip
:
$ cp /etc/hosts ./ $ gzip hosts $ zcat hosts.gz 127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Archivadores
El programa tar
es probablemente el archivador más utilizado en sistemas Linux. Su nombre proviene de la abreviatura de “tape archive”, ya que los archivos creados con tar
se denominan a menudo como tar balls. Es muy común que el código fuente de las aplicaciones se distribuya en tar balls.
Las distribuciones de Linux que incluyen la versión GNU de tar
tiene muchas opciones, esta lección cubrirá el subconjunto más utilizado.
A continuación se crea un archivo de los ficheros usados para la compresión:
$ cd ~/linux_essentials-3.1 $ tar cf archiving/3.1.tar compression
La opción c
indica a tar
que cree un nuevo archivo y la opción f
el nombre del archivo a crear. El argumento que sigue después de las opciones siempre será el nombre del archivo con el que se va a trabajar. El resto de los argumentos son las rutas a cualquier fichero o directorio que se desee añadir, listar o extraer del archivo. En el ejemplo, se añade el directorio compression
y todo su contenido al archivo comprimido.
Para ver el contenido de un archivo creado con tar
, se utiliza la opción t
:
$ tar -tf 3.1.tar compression/ compression/bigfile-xz1.xz compression/bigfile-gz9.gz compression/hosts.gz compression/bigfile2 compression/bigfile compression/bigfile-gz1.gz compression/bigfile-xz9.xz compression/bigfile3 compression/bigfile4
Nótese cómo las opciones van precedidas de -
. A diferencia de la mayoría de los programas, con tar
, el -
no es necesario cuando se especifican opciones, aunque no causa ningún problema si se usa.
Note
|
Se puede usar la opción |
A continuación se extrae el archivo:
$ cd ~/linux_essentials-3.1/archiving $ ls 3.1.tar $ tar xf 3.1.tar $ ls 3.1.tar compression
Si se necesita solamente un fichero fuera del archivo comprimido, se puede especificar después del nombre del archivo y, si es necesario, se pueden especificar varios ficheros:
$ cd ~/linux_essentials-3.1/archiving $ rm -rf compression $ ls 3.1.tar $ tar xvf 3.1.tar compression/hosts.gz compression/ compression/bigfile-xz1.xz compression/bigfile-gz9.gz compression/hosts.gz compression/bigfile2 compression/bigfile compression/bigfile-gz1.gz compression/bigfile-xz9.xz compression/bigfile3 compression/bigfile4 $ ls 3.1.tar compression $ ls compression hosts.gz
Con la excepción de las rutas absolutas (rutas que empiezan por /
), los archivos tar
conservan la ruta completa de los ficheros cuando son creados. Ya que el archivo 3.1.tar
fue creado con un solo directorio, ese directorio será creado en relación a su directorio de trabajo actual cuando sea extraído. El siguiente ejemplo describe lo anterior:
$ cd ~/linux_essentials-3.1/archiving $ rm -rf compression $ cd ../compression $ tar cf ../tar/3.1-nodir.tar * $ cd ../archiving $ mkdir untar $ cd untar $ tar -xf ../3.1-nodir.tar $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz
Tip
|
Si se desea utilizar la ruta absoluta en un archivo |
El programa tar
también puede gestionar la compresión y descompresión de archivos sobre la marcha. tar
lo hace llamando a una de las herramientas de compresión presentadas anteriormente. Es tan simple como añadir la opción apropiada para el algoritmo de compresión. Las más utilizadas son j
, J
, y z
para bzip2
, xz
, y gzip
, respectivamente. A continuación se muestran ejemplos utlizando los algoritmos mencionados anteriormente:
$ cd ~/linux_essentials-3.1/compression $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz $ tar -czf gzip.tar.gz bigfile bigfile2 bigfile3 $ tar -cjf bzip2.tar.bz2 bigfile bigfile2 bigfile3 $ tar -cJf xz.tar.xz bigfile bigfile2 bigfile3 $ ls -l | grep tar -rw-r--r-- 1 emma emma 450202 Jun 27 05:56 bzip2.tar.bz2 -rw-r--r-- 1 emma emma 548656 Jun 27 05:55 gzip.tar.gz -rw-r--r-- 1 emma emma 147068 Jun 27 05:56 xz.tar.xz
Nótese que los archivos .tar
tienen tamaños diferentes, esto demuestra que fueron comprimidos satisfactoriamente. Si se crean archivos .tar
comprimidos, siempre se debe añadir una segunda extensión de archivo que indique el algoritmo utilizado: .xz
, .bz
, y .gz
para xz
, bzip2
, y gzip
, respectivamente. También es posible utilizar extensiones más cortas como .tgz
.
Es posible añadir ficheros a archivos tar sin comprimir. Para esto se utiliza la opción u
. Si se intenta añadir a un archivo comprimido, se obtendrá un error.
$ cd ~/linux_essentials-3.1/compression $ ls bigfile bigfile3 bigfile-gz1.gz bigfile-xz1.xz bzip2.tar.bz2 hosts.gz bigfile2 bigfile4 bigfile-gz9.gz bigfile-xz9.xz gzip.tar.gz xz.tar.xz $ tar cf plain.tar bigfile bigfile2 bigfile3 $ tar tf plain.tar bigfile bigfile2 bigfile3 $ tar uf plain.tar bigfile4 $ tar tf plain.tar bigfile bigfile2 bigfile3 bigfile4 $ tar uzf gzip.tar.gz bigfile4 tar: Cannot update compressed archives Try 'tar --help' or 'tar --usage' for more information.
Gestión de archivos ZIP
Los sistemas Windows generalmente no tienen aplicaciones para manejar archivos .tar
, o muchas de las herramientas de compresión que se encuentran comúnmente en los sistemas Linux. Si se necesita interactuar con sistemas Windows, se pueden utilizar archivos ZIP. Los archivos ZIP son similares a los tar
comprimidos.
Los programas zip
y unzip
pueden ser usados para trabajar con archivos ZIP en sistemas Linux. El ejemplo a continuación muestra lo necesario para comenzar a utilizarlos. Primero se crean un conjunto de ficheros:
$ cd ~/linux_essentials-3.1 $ mkdir zip $ cd zip/ $ mkdir dir $ touch dir/file1 dir/file2
A continuación se utiliza zip
para empaquetar estos ficheros en un archivo ZIP:
$ zip -r zipfile.zip dir adding: dir/ (stored 0%) adding: dir/file1 (stored 0%) adding: dir/file2 (stored 0%) $ rm -rf dir
Finalmente, se descomprime el archivo ZIP:
$ ls zipfile.zip $ unzip zipfile.zip Archive: zipfile.zip creating: dir/ extracting: dir/file1 extracting: dir/file2 $ find . ./zipfile.zip ./dir ./dir/file1 ./dir/file2
Cuando se agregan directorios a archivos ZIP, la opción -r
permite que zip
incluya el contenido de un directorio. Si no se especifica esa opción se incluyen directorios vacíos en el archivo ZIP.
Ejercicios guiados
-
¿Cuáles de las siguientes herramientas se usaron para crear estos archivos?
Nombre de archivo tar
gzip
bzip2
xz
archive.tar
archive.tgz
archive.tar.xz
-
¿Cuáles de estos ficheros son archivos y cuáles son comprimidos?
Nombre de archivo Archivado Comprimido file.tar
file.tar.bz2
file.zip
file.xz
-
¿Cómo se añadiría un fichero a un archivo
tar
comprimido congzip
? -
¿Qué opción de
tar
permite incluir el/
inicial en rutas absolutas? -
¿La herramienta
zip
soporta diferentes niveles de compresión?
Ejercicios exploratorios
-
¿Es posible utilizar comodines utilizando
tar
al extraer archivos? -
¿De qué forma se asegura que un fichero descomprimido sea idéntico al fichero antes de ser comprimido?
-
¿Qué sucede si se intenta extraer un fichero de un archivo
tar
que ya existe en el sistema de ficheros? -
¿Cómo es posible extraer el archivo
archive.tgz
sin utiliza la opciónz
detar
?
Resumen
Los sistemas Linux incluyen varias herramientas de compresión y archivado, esta lección cubre las más comunes. La herramienta de archivado más común es tar
. Si es necesario interactuar con sistemas Windows, zip
y unzip
pueden crear y extraer archivos ZIP.
El comando tar
tiene algunas opciones que vale la pena memorizar: x
para extraer, c
para crear, t
para ver el contenido, y u
para agregar o reemplazar archivos. La opción v
muestra los archivos que son procesados por tar
mientras se crea o extrae un archivo.
Generalmente los repositorios de distribuciones de Linux incluyen muchas herramientas de compresión, las más comunes son gzip
, bzip2
, y xz
. Los algoritmos de compresión generalmente soportan diferentes niveles que permiten optimizar el proceso según la velocidad o el tamaño del archivo. Los archivos pueden descomprimirse utilizando gunzip
, bunzip2
, y unxz
.
Las herramientas de compresión generalmente incluyen programas que se comportan como herramientas comunes de archivos de texto, con la diferencia de que funcionan con archivos comprimidos, algunos ejemplos de estas son zcat
, bzcat
y xzcat
. Las herramientas de compresión suelen incluir programas con la funcionalidad de grep
, more
, less
, diff
, y cmp
.
Comandos utilizados en los ejercicios:
bunzip2
-
Descomprime un archivo comprimido con
bzip2
. bzcat
-
Muestra el contenido de un archivo comprimido con
bzip
. bzip2
-
Comprime archivos usando el algoritmo y formato
bzip2
. gunzip
-
Descomprime un archivo comprimido con
gzip
. gzip
-
Comprime archivos usando el algoritmo y formato
gzip
. tar
-
Crea, actualiza, lista y extrae archivos
tar
. unxz
-
Descomprime archivos comprimidos con
xz
. unzip
-
Descomprime y extrae el contenido de un archivo ZIP.
xz
-
Comprime archivos usando el algoritmo y formato
xz
. zcat
-
Muestra el contenido de un archivo comprimido con
gzip
. zip
-
Crea y comprime archivos ZIP.
Respuestas a los ejercicios guiados
-
¿Cuáles de las siguientes herramientas se usaron para crear estos archivos?
Nombre de archivo tar
gzip
bzip2
xz
archive.tar
X
archive.tgz
X
X
archive.tar.xz
X
X
-
¿Cuáles de estos ficheros son archivos y cuáles son comprimidos?
Nombre de archivo Archivado Comprimido file.tar
X
file.tar.bz2
X
X
file.zip
X
X
file.xz
X
-
¿Cómo se añadiría un fichero a un archivo
tar
comprimido congzip
?Se descompime el archivo con
gunzip
, y se añade el fichero contar uf
, y por último se comprime congzip
. -
¿Qué opción de
tar
permite incluir el/
inicial en rutas absolutas?La opción
-P
. De la página deman
:-P, --absolute-names Don't strip leading slashes from file names when creating archives
-
¿La herramienta
zip
soporta diferentes niveles de compresión?Sí. Utilizando la opción
-#
, se sustituye#
con un número del 0 al 9. De la página deman
:-# (-0, -1, -2, -3, -4, -5, -6, -7, -8, -9) Regule la velocidad de compresión usando el dígito especificado #, donde -0 indica que no hay compresión (almacena todos los archivos), -1 indi‐ proporciona la velocidad de compresión más rápida (menos compresión) y -9 indica la velocidad de compresión más lenta (compresión óptima, ignora la lista de sufijos). El nivel de compresión predeterminado es -6. Aunque todavía se está trabajando, la intención es que esta configuración controle la velocidad de compresión para todos los métodos de compresión. Actualmente solo se controla la deflación.
Respuestas a los ejercicios exploratorios
-
¿Es posible utilizar comodines utilizando
tar
al extraer archivos?Sí, utilizando la opción
--wildcards
.--wildcards
debe especificarse a continuación del archivotar
cuando no se utilice-
en las opciones. Por ejemplo:$ tar xf tarfile.tar --wildcards dir/file* $ tar --wildcards -xf tarfile.tar dir/file*
-
¿De qué forma se asegura que un fichero descomprimido sea idéntico al fichero antes de ser comprimido?
No se necesita nada adicional al utilizar las herramientas presentadas en esta lección. Las tres incluyen checksums en el formato de archivo los cuales son verificados en el proceso de descompresión.
-
¿Qué sucede si se intenta extraer un fichero de un archivo
tar
que ya existe en el sistema de ficheros?El fichero se sobrescribe con la versión incluída en el archivo
tar
. -
¿Cómo es posible extraer el archivo
archive.tgz
sin utiliza la opciónz
detar
?Descomprimiéndolo primeramente con
gunzip
.$ gunzip archive.tgz $ tar xf archive.tar