¿Qué es un archivo ISO y por qué se usan para descargar GNU/Linux?

La gente más joven no recordará esto, pero hubo una época en la que los ordenadores traían un lector de discos ópticos. Aunque ya no estén de moda, siguen siendo representados cada vez que usamos un archivo .iso.

El disco compacto es un formato que empezó a investigarse a finales de los 70 y que derivó en la creación del CD de audio digital en 1982 o del CD-ROM en 1984. Con el CD de audio digital se hacía posible cuantizar la música como ceros y unos para que tuviese una mejor fidelidad. Y con la creación del CD-ROM se pudo guardar cualquier tipo de datos binarios. Sin embargo, el formato siguió desarrollándose durante las siguientes décadas, y para 1995, IBM y Phoenix presentaron la extensión «El Torito» (no es broma, ese es su nombre), que permitía colocar el código máquina de un programa en un CD-ROM que se podía ejecutar al encender el ordenador. Había nacido el Boot CD.

Por supuesto, uno de los primeros beneficiarios del Boot CD fue Microsoft Windows. Ya no era necesario que el ordenador tuviese MS-DOS para ejecutar el .EXE con el instalador de Windows, porque el propio CD-ROM traía el programa de arranque que permitía leer el resto del disco e iniciar el proceso de instalación. Sin embargo, los cargadores de arranque libres tardaron poco en adquirir también la posibilidad de hacer esto mismo. GRUB puede instalarse sobre un CD, haciendo que cuando se encienda el ordenador, se ejecute GRUB, que además sabe como leer el resto del disco para así cargar una copia del kernel, un disco RAM para arrancar el entorno vivo, o el programa de instalación.

Al principio, Slackware o Red Hat prensaban sus propios CD-ROM. Es decir, adquirías físicamente un CD-ROM de Red Hat o de Slackware en su propia caja y lo instalabas igual que se hacía con Microsoft Windows. Sin embargo, para facilitar el acceso y no tener que depender de poder adquirir una copia física de GNU/Linux, en cuanto las velocidades de internet y los tamaños de los discos duros lo permitieron, empezaron a poner esos mismos CDs en sus páginas web y FTP usando los archivos .iso.

¿Qué es un archivo .iso?

Un archivo .iso es una copia digital exacta de los sectores que forman parte de un CD de datos, como un CD-R o un CD-ROM. Dicho de otro modo, si un lector de CD lee cada una de las pistas de datos que hay en uno de estos discos, y copia los ceros y los unos en un archivo, crea una copia digital del CD. Luego un quemador de CD puede hacer el proceso inverso, llevando los ceros y los unos contenidos en ese archivo sobre la superficie de un CD-R. El resultado es que si descargamos de internet un archivo .iso, tenemos en nuestro ordenador el molde digital que nos permite fabricar copias de un disco compacto de datos.

¿Por qué se les llama .iso? Una vez se inventó el formato CD-ROM en 1983, permitiendo guardar unos y ceros aleatorios, fue necesario crear el formato de archivos que debía llevar el CD-ROM. Después de todo, por entonces la informática ya estaba empezando a llegar a más gente y ya existía la noción de archivo. Los datos binarios hay que agruparlos en archivos, igual que ocurre con un diskette o con un disco duro. Dado que un CD-ROM tiene unas características únicas que no tiene ningún otro medio de almacenamiento de la época, se inventó un sistema de archivos nuevo específico para los CD-ROM. Este formato fue finalizado en 1988 y se le llamó ISO 9660.

Así que de ahí el nombre. Si tomamos un CD quemado con el formato ISO y creamos una copia digital, será interesante ponerle como extensión al archivo .iso para identificar que se trata de una copia digital de ese CD, igual que existen otras tantas extensiones para identificar un tipo de archivo.

¿Por qué se sigue usando el .iso?

En primer lugar, por retrocompatibilidad. Muchos ordenadores viejos siguen teniendo lector de CD o de DVD, y para instalar una distribución GNU/Linux en ellos, el paso de quemar un CD o un DVD con el contenido de un archivo .iso sigue siendo lo más simple. Al quemar un archivo .iso, copiamos los bytes que definen el disco, haciendo que se pueda usar exactamente igual que se lleva haciendo toda la vida.

En segundo lugar, porque puedes acabar con el CD, pero no puedes acabar con «el CD». Hoy en día, lo normal es transferir el contenido de un archivo .iso a un disco USB, como un pendrive. Tiene ventajas: un pen no se raya y no deja de funcionar a los pocos usos, y es más ecológico porque se puede borrar y volver a grabar otra ISO sobre él (aparte de cualquier otra cosa). Lo bueno es que los archivos .iso que encontramos en internet hoy en día son híbridos. El programa de arranque está colocado de tal modo que si se copia a un CD, funciona, pero que si se copia a un pendrive, también lo hace de una manera que permite al ordenador encontrarlo y lanzarlo.

En tercer lugar, por integridad. Podríamos vivir en un mundo en el que las distribuciones GNU/Linux se distribuyesen como un .zip que luego es copiado sobre un pendrive. Sin embargo, cabe la posibilidad de que se haga mal y que por lo tanto se creen copias corruptas. Al compactar toda la imagen de disco en un archivo opaco que no se puede modificar se evitan errores que pueden provocar que el proceso de creación de un medio de arranque GNU/Linux sea más complicado de llevar a cabo.

Cómo crear y abrir archivos TAR desde la terminal

Te traigo un tutorial para que aprendas a usar el comando TAR, con el que puedes generar este tipo de archivos que tan útiles resultan para archivar o transmitir múltiples ficheros o carpetas.

Un archivo TAR es un contenedor que empaqueta múltiples ficheros y directorios en un único fichero para hacerlo más fácil de archivar y distribuir. Normalmente nos encontramos los archivos TAR cuando descargamos paquetes de internet, como código fuente de programas o distribuciones ejecutables, porque es más fácil de descargar un único archivo con todo el código fuente o con todo el programa, que descargar manualmente docenas de archivos con el riesgo de que no estén actualizados.

TAR en realidad son las siglas de tape archiver, y es que este programa fue diseñado en los tiempos en los que los archivos de este tipo, por ejemplo, las copias de seguridad, se hacían sobre cinta magnética. Ahí queda claro que el propósito de TAR era condensar toda una estructura de ficheros y directorios en un mismo flujo de datos que enviar a una cinta magnética, guardándolo para el futuro. Sin embargo, hace muchos años que las cintas magnéticas fueron superados por otros formatos más baratos y fáciles de usar, como los discos duros y las memorias de estado sólido, por lo que TAR, evidentemente, te va a permitir también compactar esos ficheros y directorios sobre un archivo regular que vas a poder compartir en un pendrive o subir a tu almacenamiento en la nube. Este es un dato que puede que ahora mismo te resulte más una anécdota, pero que puede que te explique cosas cuando inicie el tutorial.

Una cosa que debes tener en cuenta es que TAR no comprime archivos, solamente los empaqueta. Esta es una de las características de la filosofía UNIX, presente hoy día en sistemas operativos como GNU/Linux o cualquier BSD, entre muchos otros. Si lo que queremos es utilizar tecnologías libres para crear archivos comprimidos, igual que haríamos en Microsoft Windows con otros formatos como el 7z o el RAR, primero tendremos que crear un TAR del directorio a comprimir, y luego comprimir por separado el archivo .tar resultante. La ventaja de este sistema es que existen múltiples formatos de compresión de archivo, y al separar ambos pasos, podemos elegir el que nos interese para cada caso de uso, o incluso prescindir de la compresión. Si vas a crear un tarball de algunos tipos de archivo, como vídeo o imágenes JPG, tienes que saber que esos tipos de archivos ya llevan compresión, por lo que volver a comprimir el TAR generado no te va a aportar mucho.

Cómo creo un archivo TAR desde la línea de comandos

Para crear un archivo TAR, todo lo que tienes que hacer es identificar primero el fichero o directorio que quieres empaquetar. En este caso, por ejemplo, vamos a empaquetar una distribución de código fuente que queremos archivar en nuestra copia de seguridad.

workstation ~/CodigoFuente $ ls
fs.c  fs.h  gui.c  gui.h  main.c  Makefile  network.c  network.h  README

En este caso, lo más recomendable sería crear un archivo TAR de todo el directorio CodigoFuente completo. Cuando fabricas un archivo TAR, toda la estructura de directorios se mantiene. Esto quiere decir que si comprimo la carpeta CodigoFuente, dentro del TAR se recordará cada uno de los subdirectorios que existen, y a qué directorio le pertenece cada uno de los ficheros que hay dentro del archivo. Y esto es ventajoso porque cuando lo extraigamos posteriormente, nos dejará los archivos colocados en una subcarpeta, para un acceso más limpio.

Se trata de evitar lo que de otro modo se conoce como tarbomb. Una «tarbomb» o «bomba TAR» ocurre cuando al extraer un archivo, nos llena el directorio actual de archivos extraídos, haciendo mucho más complicado encontrar cuáles son los archivos que vienen del TAR y cuáles son los que ya estaban en el directorio de trabajo antes de iniciar la extracción. Es una mala práctica y van a odiarte mucho si esto ocurre, por lo que lo mejor es comprimir la carpeta completa desde arriba:

Nos vamos a ir al directorio superior y vamos a ejecutar el siguiente comando para comprimir:

workstation ~/CodigoFuente $ cd ..
workstation ~ $ tar -cvf CodigoFuente.tar CodigoFuente
CodigoFuente/
CodigoFuente/network.h
CodigoFuente/main.c
CodigoFuente/gui.c
CodigoFuente/fs.h
CodigoFuente/Makefile
CodigoFuente/network.c
CodigoFuente/fs.c
CodigoFuente/gui.h
CodigoFuente/README

Os describo qué se ha hecho aquí. El comando tar, que es el que se usa para crear y abrir archivos de tipo tar, está lleno de opciones. Podemos ver un extracto de estas opciones si ejecutamos el comando tar --help, aunque también podemos ver en detalle un manual de instrucciones si ejecutamos man tar y nos leemos su manpage.

Podemos modificar muchísimos aspectos a la hora de crear archivos, incluyendo la posibilidad de actualizar un TAR ya existente, o de conservar la información de permisos de archivo en un sistema UNIX. En este caso, no le estoy dando tantas opciones: apenas le dí los siguientes flags, -cvf. Si vamos a pasarle varias opciones, podemos simplificarlo y en vez de escribirlo como -c -v -f, lo podemos pasar todo junto como -cvf. El efecto será el mismo.

En este caso, las opciones que le he dado son:

  • -c: con esta opción, lo que le digo a TAR es que vamos a crear un archivo TAR. Debería venir de las primeras, ya que esta opción es la que le dice al programa qué va a hacer hoy, si crear, listar o extraer.
  • -v: con esta opción voy a activar el modo verboso. Esto significa que cada vez que TAR procese un archivo, va a escribir a la terminal una línea diciendo cómo se llama el archivo que se ha procesado. Esto nos viene bien para dar seguridad, aunque en algunos casos podemos quitar la opción para hacer más silenciosa la ejecución.
  • -f: con esta opción, le especifico que quiero que me procese el TAR sobre un archivo. Este paso parece obvio pero hay que aclararlo, por las razones que comentábamos antes: TAR es realmente capaz de volcar datos en muchas partes, archivos, cintas e incluso sobre la salida estandar en bruto. Por lo tanto, tenemos que especificar la opción -f para pedirle que vuelque sobre un archivo, cuyo nombre, de hecho, tiene que venir después. Por eso, a continuación de la opción -f nos encontramos ese CodigoFuente.tar. Con esto le estamos diciendo cómo queremos que se llame el archivo de código fuente que queremos que nos genere.

Después del CodigoFuente.tar que pertenece a esa opción -f, tenemos que poner la lista de archivos regulares y directorios que queremos incluir en el archivo. En este caso voy a poner simplemente CodigoFuente porque quiero que me incluya el directorio con todos sus descendientes. Si quisiésemos incluir más elementos en el archivo, podríamos poner la lista completa. Por ejemplo, tar -cvf Salida.tar Carpeta1 Carpeta2 Carpeta3 Leeme.txt.

Una vez ejecutamos el comando, tenemos nuestro archivo CodigoFuente.tar correctamente creado.

Cómo listo el contenido de un archivo TAR

Supongamos que tenemos un archivo TAR y queremos saber lo que hay dentro sin extraerlo. Igual que podemos usar la opción -c para crear un archivo TAR, tenemos más opciones para inspeccionar o para extraer el contenido de uno de estos archivos.

Veamos cómo utilizar la opción -t, que lo creas o no quiere decir --list, es decir listar el contenido de un archivo. Para este ejemplo, he colocado en mi carpeta de descargas un paquete que he obtenido de internet y que está en formato TAR:

workstation ~/Downloads $ ls
gzip-1.12.tar
workstation ~/Downloads $ tar -tf gzip-1.12.tar
gzip-1.12/
gzip-1.12/gzip.1
gzip-1.12/zcmp.in
gzip-1.12/cfg.mk
gzip-1.12/configure.ac
gzip-1.12/gunzip.1
gzip-1.12/zmore.in
gzip-1.12/zip.c
gzip-1.12/zless.in
gzip-1.12/zforce.in
[etc]

En este caso, como se ve, el comando que he usado es tar -tf. La explicación de parámetros me va a llevar menos tiempo:

  • -t, como he dicho, pone TAR en modo listar. No se va a extraer nada, solamente se va a enumerar lo que hay dentro del archivador. El resultado del comando se volcará sobre salida estandar, lo que significa que lo veremos en nuestra terminal o que lo podremos mandar a otro programa.
  • -f es, de nuevo, la opción que usamos para especificar que queremos trabajar con un archivo, ya que de otro modo le podríamos especificar otra fuente de datos; tal vez un flujo de entrada estandar que venga de un lugar como pueda ser internet o incluso un lector de cintas magnéticas de verdad. Y de nuevo, le especificamos a continuación el archivo que queremos que procese.

En este caso, no le estoy proporcionando la opción -v porque el comando va a generar igualmente una lista de resultados quiera o no, así que no es necesario especificarlo.

Cómo extraigo un archivo TAR

Finalmente, vamos a ver como extraer un archivo. Se hace, como antes, modificando los parámetros que le pasamos al comando tar, y poniéndolo esta vez en modo extracción, que es la opción -x, de extract.

Vamos a hacer el ejemplo usando el mismo paquete que he mostrado en el caso anterior.

workstation ~/Downloads $ tar -xf gzip-1.12.tar 
workstation ~/Downloads $ ls
gzip-1.12  gzip-1.12.tar
workstation ~/Downloads $ ls gzip-1.12
aclocal.m4      gzip.doc     unzip.c
algorithm.doc   gzip.h       util.c
AUTHORS         inflate.c    zcat.1
bits.c          INSTALL      zcat.in
build-aux       lib          zcmp.1
cfg.mk          lzw.h        zcmp.in
ChangeLog       m4           zdiff.1
ChangeLog-2007  maint.mk     zdiff.in
configure       Makefile.am  zegrep.in
configure.ac    Makefile.in  zfgrep.in
COPYING         NEWS         zforce.1
deflate.c       README       zforce.in
dfltcc.c        revision.h   zgrep.1
dist-check.mk   sample       zgrep.in
doc             tailor.h     zip.c
GNUmakefile     tests        zless.1
gunzip.1        THANKS       zless.in
gunzip.in       TODO         zmore.1
gzexe.1         trees.c      zmore.in
gzexe.in        unlzh.c      znew.1
gzip.1          unlzw.c      znew.in
gzip.c          unpack.c

En este caso, he prescindido de la opción -v. De habersela dado, podría obtener un listado de los archivos que se iban extrayendo a medida que esto iba ocurriendo. Os he querido enseñar aquí que no siempre es necesario poner el comando en modo verboso, y que a veces se puede extraer en silencio. Sin embargo, si vamos a extraer grandes copias de seguridad desde la terminal y no nos molesta, tal vez nos interese presentar con la opción -v un progreso de la extracción, para saber por lo menos que todo está yendo bien cuando miremos la terminal.

En este caso, el comando completo que he usado tiene como parámetros -xf. Como os hacéis a la idea, la opción f sirve para decirle cómo se llama el archivo que queremos extraer. Sin embargo, en este caso, la opción -x es la que usamos para, como os digo, pedirle a TAR que extraiga.

Por suerte, este paquete está bien montado y cuando se extrae genera un directorio llamado gzip-1.12 con el código funete de la aplicación. Si entre manos tuviésemos una tarbomb, mi directorio de descargas ahora estaría lleno de archivos, y yo tendría que echar más tiempo en limpiar luego, con el fin de quitar lo que sirve y lo que no.

¿Cómo instalaría WinRAR en GNU/Linux?

Esta es una de las preguntas más típicas para alguien que llega a GNU/Linux por primera vez. Voy a intentar aclarar un poco la confusión sobre GNU/Linux, archivos RAR y cómo extraerlos.

Lamentablemente, no puedes instalar WinRAR en GNU/Linux porque no existe versión de WinRAR para GNU/Linux. Sin embargo, es posible igualmente extraer de forma gratuita archivos .rar usando el programa unrar. En este artículo te cuento cómo.

Tienes que tener en cuenta, antes que nada, que el formato de archivos RAR es un formato propietario. Esto quiere decir que no es libre y abierto, y que la empresa detrás de WinRAR controla la creación de herramientas que interactúen con sus archivos. Esta es la razón por la que tan complicado es encontrar un software que simplemente extraiga archivos RAR: nadie se quiere meter en problemas con WinRAR.

Aunque puedes hacer lo que quieras, sería recomendable reemplazar los archivos .rar por otros formatos de archivos diferentes para comprimir, que no tengan restricciones tan severas, como .zip o .tar.gz. Con esto, es posible intercambiar más fácilmente archivos comprimidos porque no depende tanto de que las dos personas tengan la capacidad para extraer archivos .rar.

Cómo extraer archivos RAR en GNU/Linux con unrar

La mayoría de distribuciones GNU/Linux traen igualmente un programa en sus repositorios llamado unrar. Si bien WinRAR es un programa para Windows «de pago» (o al menos, trialware), su desarrollador ha tenido la delicadeza de proporcionar una versión gratuita (que no libre) para GNU/Linux que es capaz de descomprimir archivos.

Antes de instalarla, conviene que te plantees si la necesitas. Algunas distribuciones modernas, como Fedora, son capaces de extraer archivos RAR simplemente haciendo doble clic sobre ellos desde el explorador de archivos. Ya hemos hablado de esto alguna vez en esta web. Si lo único que necesitas es extraer un par de documentos, tal vez con esto te baste.

Si no eres capaz, vas a tener que instalar unrar desde el gestor de paquetes de tu distribución. Desde la terminal, tendrás que ejecutar el comando más oportuno para tu plataforma:

  • Ubuntu/Debian/derivados: sudo apt install unrar
  • Fedora/RHEL: sudo dnf install unrar-free
  • Arch o basadas en Arch: instala el paquete rar desde AUR.

Nota importante: si estás usando Debian, tendrás que activar los repositorios non-free, que no suelen venir activos por defecto. En Ubuntu, sí es posible instalarlos a la primera. Para Debian, también tienes como alternativa instalar unrar-free, aunque existen algunas diferencias en el funcionamiento que para algunos archivos RAR puede suponer que sea incapaz de extraerlo en primer lugar.

Una vez lo hayas instalado, ¿cómo se extrae un archivo RAR? Desde la misma terminal, deberás irte a la carpeta en la que está tu archivo RAR usando el comando cd, por ejemplo: cd /home/usuario/Descargas. A continuación, deberás utilizar el comando unrar con la opción x, que quiere decir extraer, y darle el nombre del archivo. Aquí un ejemplo completo:

# Me voy a la carpeta donde está mi archivo:
~ $ cd Descargas


# Ahora extraigo mi archivo RAR
~/Descargas $ unrar x Documentacion.rar
UNRAR 5.61 beta 1 freeware     Copyright (C) 1993-2018 Alexander Roshal
Extracting from Documentacion.rar

Extracting   Documento1.pdf
Extracting   Documento2.pdf
Extracting   Documento3.pdf
Extracting   Documento4.pdf
All OK


# Listo, ya están ahí mis archivos extraídos
~/Descargas $ ls
Documentacion.rar  Documento1.pdf  Documento2.pdf
Documento3.pdf     Documento4.pdf

Cómo extraer archivos .rar en Fedora 37 y 36

Todavía queda gente que sigue usando archivos RAR, por alguna razón. Si te ha llegado un archivo RAR, no te preocupes, en este post te cuento cómo extraerlos fácilmente si tu sistema operativo es Fedora.

La gente tiene derecho a evolucionar. Tal vez empezaste usando GNU/Linux en Ubuntu, luego te pasaste a Debian, y luego te pasaste a Fedora. La vida es un camino que vamos fabricando a medida que tomamos decisiones y vamos evolucionando nuestra forma de ser. Entonces, ¿por qué hay gente que en 2022 continúa enviando archivos comprimidos en formato .rar? Si te ha llegado uno de esos, no te preocupes, en este post te cuento cómo extraerlos fácilmente si tu sistema operativo es Fedora.

¿Lo prefieres hablado? Este post también está disponible como vídeo:

El principal problema del formato RAR es que no es abierto. Como tal, es un formato de archivos privativo y existen muchísimas restricciones en cuanto a la elaboración de programas que creen archivos RAR. Es por ello que, si como usuarios de GNU/Linux recibimos un archivo en formato RAR, vayamos a tener algún que otro quebradero de cabeza para encontrar una herramienta con la que abrirlo, debido a que por defecto no va a haber soporte para archivos RAR en la distribución.

En el caso de Fedora, el extractor de archivos de GNOME ya trae soporte para extraer archivos RAR. Dicho de otro modo, debería ser posible extraer un archivo RAR haciendo doble clic sobre el icono del archivo RAR dentro de la aplicación Archivos. En el caso de Fedora 36, se extraería en la misma carpeta en la que está el archivador.

Sin embargo, si estás leyendo esto, es posible que sea porque el paso anterior no te ha funcionado y buscas una resolución para poder abrir ese archivo RAR que se te resiste. También puede ser que busques una forma alternativa, por ejemplo para extraerlos sobre la línea de comandos en un servidor o porque prefieras usar una interfaz alternativa.

Fedora trae un programa llamado unrar-free en sus repositorios princpiales, que ofrece una línea de comandos de código abierto que permite extraer archivos RAR desde la línea de comandos. Para poder instalar unrar-free, deberás utilizar DNF o bien usar una herramienta auxiliar como DNFdragora.

sudo dnf install unrar-free
...
¿Está de acuerdo? [s/N]: s

Cuando se haya instalado, podrás utilizar la terminal para extraer con el comando unrar-free ese archivo RAR que se está resistiendo.

$ unrar Documentos.rar
unrar-free 0.1.1  Copyright (C) 2004 Ben Asselstine, Jeroen Dekkers

Extracting from /home/dani/Descargas/Documentos.rar
Extracting  Documento1.pdf     OK
Extracting  Documento2.pdf     OK
Extracting  Documento3.pdf     OK
All OK