Ejecutar comandos en el arranque de GNU/Linux con systemd

Si tienes que ejecutar un comando cuando se enciende el ordenador, como iniciar manualmente un servicio o hacer un ajuste sobre un driver, puedes orquestarlo con systemd.

En este ejemplo vamos a ver cómo ejecutar un comando, como un script, cuando se enciende el ordenador. El objetivo es que durante el proceso de arranque, se invoque el comando; por ejemplo, que si el comando es un script que debe escribir algo en un archivo, lo haga. Para ello, nos estaremos apoyando en systemd, y crearemos una unidad personalizada que ejecute ese comando durante el arranque.

Esto contrasta con otras formas de ejecutar programas al encender el ordenador, como ponerlo en el autostart de nuestro entorno de escritorio o agregarlo al .bashrc, de que se hará durante el proceso de arranque, así que normalmente se ejecutará mientras el ordenador está iniciando, antes siquiera de que pongamos la contraseña.

Creamos un script de apoyo

En este ejemplo, fabricaré un script auxiliar que será el que defina lo que quiera que ocurra cuando se encienda el ordenador. Para este caso particular, haré que mi script escriba algo sobre uno de los archivos del directorio /sys, una operación típica para modificar el funcionamiento de alguno de los dispositivos de hardware del ordenador.

Crearé un script denominado update-led.sh con el código de mi script:

$ cat > update-led.sh <<EOF
> #!/bin/bash
> echo 1 > /sys/devices/platform/leds/leds/red:standby/brightness
> EOF
$

Como este script requiere ser ejecutado como root, lo pondré en una ubicación más propia del sistema, como /usr/local/sbin, y lo haré ejecutable:

sudo mv update-led.sh /usr/local/sbin/update-led.sh
sudo chmod +x /usr/local/sbin/update-led.sh

Si ahora queremos probar que el script funciona correctamente, lo podríamos ejecutar si es que es una opción en primer lugar.

Invocar el script al arrancar el sistema

Ahora definiré una unidad de systemd que todo lo que tiene que hacer es invocar este script que he fabricado. Para ello crearé un archivo en el directorio /etc/systemd/system, que es donde se colocan las unidades personalizadas de systemd. El archivo podrá tener el nombre que más nos interese, pero deberá terminar por .service. El nombre que le demos, quitando el .service, será como luego será ejecutado mediante systemctl start y similares.

Este archivo tendrá que contener lo que describo más abajo, cambiando las siguientes líneas de interés:

  • Description será cambiado por un comentario sobre qué hace el comando, para identificarlo semanas después, por ejemplo, «arreglo para el driver de red» o «ejecuta rm -rf a .cache».
  • ExecStart será cambiado por la ruta completa al script que hayas creado en tu caso.
[Unit]
Description=Activar el LED

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/update-led.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Este servicio está declarado como oneshot. systemd es bueno ejecutando programas que tienen que estar en marcha todo el tiempo mientras el ordenador está encendido, como el sistema de audio, un agente SSH o GPG… Sin embargo, en este caso le pediremos que ejecute el comando una vez y ya está. La instrucción RemainAfterExit también se usa para señalizar que si el comando termina, todo estará correcto.

Finalmente le pediremos a systemd que active esa unidad, ejecutándola a partir del próximo reinicio. Supongamos que el archivo de unidad se denomina update-led.service, pues el nombre a activar será update-led:

sudo systemd enable update-led

Y opcionalmente si queremos probarlo ya, podemos pedirle que ejecute el script inmediatamente con:

sudo systemd start update-led

passwd: todo lo que debes saber

Un tutorial para poder utilizar el comando passwd que puede ayudar a las personas que recién llegan a UNIX.

El post en el que explicaba cómo recuperar la contraseña de Debian me dio la idea de profundizar más en el funcionamiento del comando passwd, ya que tiene varias formas de operar según cómo se llame a este comando.

passwd sirve para cambiar la contraseña de una cuenta. Si ejecutas el comando normal en tu terminal, por ejemplo, passwd, bajo tu propia cuenta de usuario solo podrás cambiar tu propia contraseña. Sin embargo, el auténtico poder de este comando está en invocarlo como superusuario (es decir, como root). Cuando la cuenta root ejecuta este comando, puede cambiar cualquier contraseña: la suya o la de otra cuenta.

Cuando invoques passwd con una cuenta normal, lo primero que hará es pedirte la contraseña actual, y así lo veremos cuando dice Current password. Aquí tenemos que meter la contraseña que tenemos ahora mismo. Esto es una medida de precaución para asegurarse de que un script automatizado no trata de cambiar nuestra contraseña sin permiso.

Ten en cuenta que cuando escribas una contraseña, no la verás por pantalla. Igual que pasa con el comando sudo, no habrá feedback. Ni si quiera unos asteriscos. Cuando empieces a escribir la contraseña, hazlo con determinación y no te detengas a medio de teclearla, para no cometer errores.

Después de escribir la contraseña actual y pulsar Enter, el sistema nos preguntará por la contraseña nueva que queramos establecer. En total la tendremos que escribir dos veces, porque nos pedirá confirmación. Así, si la hemos escrito mal, nos avisará para no bloquear nuestro sistema.

$ passwd
Current password:
New password:
Retype new password:
passwd: password updated successfully

Sobre esto, varias notas extra:

  • La configuración del sistema operativo podría traer reglas adicionales que pueden impedir que se guarde la contraseña. Por ejemplo, es posible que rechace cambiar la contraseña si no tiene un número mínimo de caracteres, o incluso si no junta alguna mayúscula o dígito.
  • Es posible que si pones la misma contraseña como nueva contraseña, te lo rechace y te diga que es la misma contraseña de todos modos.

Por último, el auténtico poder de este comando está en lanzarlo como root. Si lo hacemos podremos cambiar la contraseña de cualquier usuario si lo especificamos como parámetro al lanzar el comando. En este caso, de hecho, passwd no preguntará por la contraseña, lo que le convierte también en el comando ideal para usar si tenemos que recuperar una contraseña en concreto:

# passwd ana
New password:
Retype new password:
passwd: password updated successfully

Recuperar la contraseña de superusuario de Debian 11

¿Te has olvidado de la contraseña que le diste a la cuenta de root en tu instalación de Debian? Suele pasar si no la usamos con mucha frecuencia. Te cuento cómo usar el modo rescate para reestablecerla.

Cuando se configura Debian, una de las primeras cosas que pregunta el sistema operativo es qué contraseña le pretendemos dar a la cuenta de superusuario, es decir, a la cuenta root. Otras distribuciones GNU/Linux han decidido restringir el uso de la cuenta root y facilitar que la distribución se instale teniendo una cuenta superusuario como primera cuenta. No es el caso de Debian, que sigue dándole mucha importancia a la cuenta de superusuario root, y que ni siquiera configura por defecto sudo en la cuenta principal cuando se instala el sistema.

Sin embargo, ¿qué hacer cuando no hemos utilizado en una larga temporada esa cuenta y nos hemos olvidado de su contraseña? ¿Cómo podemos reestablecer la contraseña de root en Debian 11? Vamos a ver qué opciones tenemos en este post.

El juego de ejecutar passwd como root

El objetivo es conseguir tener acceso a una shell root desde la que podamos ejecutar passwd. Este es un comando interesante de administración de sistemas UNIX que sirve para cambiar una contraseña. Cuando lo ejecutamos como root, nos permite cambiar la contraseña de cualquier cuenta del sistema.

Si ponemos passwd sin más cuando somos root, cambiaremos la contraseña de root. Tan fácil como esto. De modo que el objetivo de este juego será conseguir una shell de root con la que hacer el cambio de contraseña.

El caso más simple es si ya tienes montado sudo en tu ordenador. Si tu cuenta personal está configurada para poder utilizar sudo, no tienes que hacer nada más que ejecutar sudo su. Con esto, utilizarás tu propia contraseña para acceder a una shell de root.

workstation ~ $ sudo su -
[sudo] contraseña para dani: 
[root@workstation ~]# passwd
Nueva contraseña:

Sólo recuerda que:

  • Cuando teclees la contraseña, esta no será visible por pantalla, así que teclea con confianza y sin detenerte. Con esto evitarás problemas si estás escribiendo palabras y no te equivocarás.
  • Tendrás que escribir la contraseña dos veces y tiene que coincidir. Si la has escrito mal alguna de las veces, te avisará y tendrás que volver a empezar.

Entrar en modo rescate

Si no tienes montado sudo, doas ni nada parecido (cosa que deberías), no quedará otra que entrar en modo de rescate. Resulta sorprendente lo fácil que es arrancar GNU/Linux en modo rescate saltándose cualquier medida de protección, pero si el disco no está cifrado, técnicamente no hay nada que impida hacer esto.

Para entrar en un modo rescate que nos permita saltar la contraseña, todo lo que haremos será reiniciar el ordenador y pulsar e cuando estemos en la pantalla de elección de entorno.

Pantalla de GRUB en Debian 11.

Al pulsar la tecla e aparece el editor de arranque. Con esto podemos modificar los comandos que se ejecutan por GRUB para arrancar el sistema operativo. Por dar la nota, cuando seleccionamos una opción premarcada como Debian GNU/Linux en GRUB realmente ejecutamos todas las instrucciones que se están viendo ahí.

Todo lo que haremos ahora será desplazarnos hacia la línea que empieza por linux (la que empieza por linux /boot/vmlinuz...). Nos desplazamos al final de la línea (aquí puedes usar Ctrl + E para ir rápidamente al final de la línea). Después, borramos las últimas palabras (ro quiet) y en su lugar pondremos rw init=/bin/bash. En definitiva, la línea de linux tiene que quedar tal que así:

    linux    /boot/vmlinuz-5.10.0-19-amd64 root=UUID=... rw init=/bin/bash

Ten en cuenta que la versión del kernel que acompaña a vmlinuz puede cambiar. Además, he suprimido el UUID completo de mi disco porque será diferente al tuyo. Una vez lo hayas comprobado, pulsa Ctrl-X o F10 para arrancar el sistema.

linux /boot/vmlinuz-5.10.0-19-amd64 root=UUID rw init=/bin/bash
El aspecto de GRUB para arrancar en modo rescate

Cuando termine de cargar, verás una shell. Esta shell está conectada al disco duro, por lo que con esto ya tenemos una sesión root para poder ejecutar algunos comandos. Deberías poder comprobar que el disco duro está montado en modo escritura. Esto es algo que puedes hacer ejecutando el comando mount y comprobando si en la salida se incluye una línea que contenga tu partición y la raíz (/). En los flags de montaje debe salir la opción rw. Por ejemplo, en mi caso veo:

/dev/vda1 on / type ext4 (rw,relatime)

Esto es suficiente de por sí.

Como puedes ver en tu shell, root@(none) implicará que tenemos una shell de root. Con esto ya podemos ejecutar el comando passwd y establecer una nueva contraseña para la cuenta de superusuario:

root@(none):/# passwd
New password:
Retype new password:
passwd: password updated successfully
root@(none):/#

Una vez que hagas esto, reinicia tu ordenador. Posiblemente a la fuerza si tienes problemas para escribir reboot. Deberías comprobar que si ahora tratas de escribir la contraseña de superusuario (por ejemplo, usando el comando su), ya te la aceptará.

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