Trabajando la consola

Trabajando la consola

A los que pintamos algunas canas ya el mundo del cine y la literatura de ciencia ficción nos regalaron durante mucho tiempo consolas de gestión y control casi mágicas. Todos recordamos las maravillosas imágenes de películas como WarGames o 2001: Una odisea en el Espacio. Sin embargo día a día pasamos nuestra jornada laboral trabajando con un prompt o consola de usuario bastante espartana, que no se parece ni por asomo a todo eso que hemos visto en las películas.

Más allá de la anécdota, hoy os quiero introducir en el uso de varias herramientas que convierten la consola de usuario en un sitio más confortable para trabajar.

La shell

La shell o línea de comandos (CLI) es una interfaz de usuario para poder acceder a los servicios que ofrece un sistema operativo y a los ficheros que residen en él. Existen distintos tipos de shell en entornos ‘Unix’: los más populares son bash, csh, ksh, sh  y zsh . Estas shells están disponibles en prácticamente cualquier sistema operativo de hoy en día. En entornos Windows, también tenemos una shell llamada ‘Windows Powershell’ o ‘Powershell.

Podemos elegir cualquiera de ellas, si bien bash ha ganado popularidad y viene definida como shell por defecto en la mayoría de distribuciones.

Aunque bash supla todas las necesidades que podamos encontrar, hoy vengo a hablaros de zsh, mi shell favorita y que utilizo por defecto.

zsh  es una shell con multitud de características que la hacen interesante y más cómoda para su uso diario. Algunas de ellas son:

  • Completado automático de comandos.
  • Personalización del prompt mediante plugins: Plugins para Git (p.ej: rama/repo actual), Python (p.ej: virtualenv) u otros.
  • Cambio automático de directorios: No hace falta usar cd directorio/ , sino simplemente directorio.
  • Expansión de variables: Si haces echo $PATH<TAB> te autocompletará el contenido de la variable $PATH .
  • Expansión de paths: Si haces cd u/l/b<TAB> te autocompletará el path a cd /usr/local/bin.
  • Iteración sobre ficheros: En bash: for f in *.txt; do echo $f; done , en zsh: for f (\*.txt) { echo $f; }.

Para sacar un poco más de jugo a la Z shell podéis instalar Oh My Zsh, un framework para gestionar la configuración de zsh  con el que obtendréis una shell con capacidades casi infinitas gracias a plugins.

Aquí podéis ver una captura de mi shell actual bajo Windows Subsystem Linux:

Oh-My-Zsh bajo Debian en Windows Subsystem for Linux

Gestor de terminales

Una de las herramientas que más ha cambiado cómo trabajo en la shell ha sido sin lugar a dudas tmux, el multiplexador de terminales. Un multiplexador de terminales es una herramienta que nos permite en una única terminal trabajar con múltiples terminales de tipo virtual. Es decir, una suerte de escritorio de terminales pero sin hacer uso alguno del ratón, directamente en el CLI.

Podemos dividir de forma vertical u horizontal mediante comandos una terminal para ajustarla a nuestras necesidades, por ejemplo, revisión de logs mientras reinicias un servicio o múltiples salidas de logs en una sola terminal. También podemos crear múltiples terminales para asignarlas a un entorno o máquina concreta, todas ellas dentro de la única interfaz de ‘tmux’ y tener así controladas en una sola terminal todas las shells de trabajo de una infraestructura.

Otra ventaja de trabajar con tmux  es la comodidad de poder conectarte a una ventana de que ya estaba funcionando o desconectarte de ella sin que las conexiones o el trabajo que hacías en ella se pierdan. Cuando trabajas con entornos remotos donde atraviesas múltiples hosts y temes perder conectividad y, con ello, tu trabajo en curso, tmux es una herramienta esencial.

tmux está disponible para entornos ‘Unix’ y Mac, y es de fácil instalación mediante el instalador de paquetes de la distribución. Para entornos Windows podemos utilizar Windows Terminal, que tiene funcionalidades muy parecidas a cómo trabaja tmux o usar ‘Windows subsystem for Linux’ para disfrutar directamente de la herramienta.

‘Tmuxinator’

Existe un complemento ideal para tmux y que ahorra mucho tiempo a la hora de crear perfiles de trabajo. Esta aplicación se llama  tmuxinator  y te permite ejecutar mediante un único comando un conjunto de configuraciones de tmux preestablecidas. Es decir, genera plantillas para tmux.

Por ejemplo, si tienes que acceder a un conjunto de servidores web, servidores de balanceo de carga como Haproxy y una base de datos de tu aplicación, puedes configurarlo para que te genere un conjunto de configuraciones de tmux y que con una única orden te genere por ejemplo:

  • Una ventana con dos paneles: Un panel con la carga de CPU de los nodos de Haproxy y otro panel con los logs del servicio.
  • Una segunda ventana con dos paneles: uno con los logs de acceso del servidor web y otro debajo con los logs de error.
  • Una última ventana dividida también en dos paneles, uno con la carga de CPU del sistema de bases de datos y otro debajo con la salida de un ‘SHOW FULL PROCESSLIST’.

De esta forma, cada vez que quieras comprobar el funcionamiento de tu infraestructura, simplemente tienes que decirle a ‘tmuxinator’ que te ejecute el perfil de tu aplicación y se conectará automáticamente a las máquinas y te sacará el perfil tal y como tú se lo hayas solicitado.

Por último os dejo la configuración de tmux que utilizo y que está basada en este repositorio de ‘gpakosz’.

Y que luce así:

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *