Categorías
Personal

tmux – el potenciador para tu terminal

Tmux es una aplicación para la terminal que permite tener varias ventanas de terminal en una única sesión.

Esta frase puede ser un poco enrevesada, pero define una de las funciones que permite Tmux, pero no la única.

A parte de permitir varias ventanas o paneles de la terminal, también nos deja cerrar la conexión de la sesión, pero no cerrar la sesión en si, lo que sería enviar a background, y recuperar esta sesión más tarde y todo seguirá tal como lo dejamos.

Cliente-Servidor, Sesiones, Ventanas, Paneles

En Tmux hay cuatro conceptos de estructura que conviene tener claros para luego hablar de su funcionamiento, el primero es que es una aplicación de tipo cliente-servidor, pero no se trata de un servidor como el que conocemos, que está escuchando en background como podría ser apache o mysql, este servidor de tmux se crea automáticamente al crear la primera sesión y se mantiene mientras exista alguna sesión de tmux, esté activa o en background. En el momento de cerrar la última sesión de tmux se cierra el servidor también.

Otro de los conceptos que se debe conocer de Tmux son las sesiones, una sesión es una conexión realizada con en servidor de Tmux. Sesiones sólo puede haber una activa al mismo tiempo, pero pueden existir multiples sesiones no activas gestionadas por el servidor de Tmux (más adelante veremos como cambiar de una sesión a otra).

Dentro de una sesión puede haber múltiples ventanas (windows) sería como tener varias pestañas dentro de una sesión.

Y el último concepto serían los paneles, que son como tener varias terminales dentro de una misma ventana, es decir se divide la ventana horizontal y/o verticalmente y podemos trabajar con dos terminales al mismo tiempo.

Puede parecer un poco lioso al principio, pero una vez se entienden estos conceptos, es muy fácil organizarse.

Attach / Detach session

El siguiente concepto que vamos a ver, ya lo hemos nombrado varias veces, que es la sesión activa, sesión en background.

La sesión activa es la que se ve en pantalla en este momento, sobre la que estamos trabajando, en inglés la palabra que se utiliza es attach y el contrario, la palabra para una sesión esté en el fondo o background sería detach.

La mayor diferencia entre una sesión attach y otra detach es que en esta última no podemos hacer entrada de comandos ni ver la salida por pantalla, pero a nivel de funcionamiento es exactamente igual que una activa.

Instalación de tmux

tmux está disponible para sistemas Unix, así que ya trabajemos en MacOS o en Linux podremos instalarlo.

Para instalar tmux en MacOS podemos utilizar el gestor de paquetes Homebrew que sería el sistema más recomendado. El comando para instarlo sería:

brew install tmux

Y si estamos en sistemas Linux de tipo Debian/Ubuntu utilizaremos apt-get:

apt-get install tmux

En cambio si estamos en sistemas de tipo Redhat/CentOS utilizaremos yum:

yum install tmux

Trabajando con tmux
Si ya hemos instalado tmux, ya sea en un sistema o en otro, disponemos del comando de terminal tmux.

Abrimos nuestra terminal, ejecutamos tmux y vemos que nos devuelve al prompt pero con un interface un poco diferente, esto es una sesión en tmux (y por debajo ha iniciado un nuevo servidor).

Como podemos ver la shell es exactamente la misma que teníamos, y los comandos que podemos utilizar son los mismos también.

Prefix

En tmux, todas las acciones que podemos hacer en él, se basan en combinaciones de teclas, pero para que no haya colisiones con otras combinaciones del sistema, se utiliza un prefijo para estas combinaciones para así indicar a tmux que lo siguiente es un comando que debe interpretar.

El prefijo por defecto de tmux es Ctrl+B (aunque esto es configurable como veremos más adelante).

Para ejecutar un comando en tmux sería por ejemplo: Apretamos la combinación Ctrl+B, soltamos y luego apretamos la tecla correspondiente al comando que queremos ejecutar.

Por ejemplo, para ver el listado de ventanas de una sesión sería: Prefix + w (Ctrl+B w)

Detach / Attach

Ahora vamos ha ver cómo podemos “desatachar” una sesión, la combinación para hacer un detach es Prefix-d, esto nos devolverá a nuestra terminal estándar y dejará la sesión en la que estábamos en background.

Para “attachar” la última sesión, se hace ejecutando el comando tmux con el parámetro attach o su abreviación a.

tmux attach

pero si en cambio tenemos varias sesiones en detach y queremos ir a una específica lo podemos indicar con la opción -t y el índice de sesión.

tmux a -t 1

Crear una nueva sesión
Para crear una sesión nueva, simplemente ejecutamos tmux y esto nos crea una nueva sesión. Por defecto las sesiones están nombradas en base a números, iniciando en el 0, pero también podemos darle un nombre, para una mejor identificación.

Para añadir un nombre debemos ejecutar tmux con el parámetro new y la opción -s [nombre sesión]

tmux new -s dev

y si queremos ver un listado de las sesiones que tenemos abiertas lo haremos con el parámetro list-sessions

tmux list-sessions

Crear un nueva ventana
Si estamos dentro de una sesión podemos crear una nueva ventana, que como hemos dicho anteriormente, serían como una pestaña nueva dentro de la misma sesión.

Para crear una ventana desde dentro de una sesión ejecutamos el comando Prefix+c y veremos que en la parte central inferior nos lo indica también con un número de ventana comenzando en 0 y la aplicación que se está ejecutando, que normalmente será la shell que estemos utilizando.

Si queremos ver el listado de ventanas abiertas en esta sesión, ejecutaremos Prefix+w y con las flechas podemos seleccionar la ventana a la que queremos cambiar.

Otra manera de pasar a una ventana específica es con la combinación Prefix+[número de ventana] y nos saltará a la ventana especificada en el índice.

También podemos pasar de una ventana a la otra de manera circular con las combinaciones Prefix+n para la siguiente y Prefix+p para la anterior (de next y previous)

Crear un nuevo panel

Los paneles son la parte más “vistosa” de tmux, porque hasta ahora con las sesiones y las windows siempre parecían como terminales separados, pero ahora veremos que con los paneles podemos llegar a configurar diversos terminales en la misma ventana haciendo tareas independientes.

Los paneles se pueden crear horizontal o verticalmente, dependiendo de lo que nos interese.

Para crear un panel horizontal utilizaremos Prefix+% y para crear un panel vertical Prefix+" (estas combinaciones se pueden modificar)

Pero la cosa no queda aquí, un panel (ya sea horizontal o vertical) también lo podemos dividir en otros dos paneles, así podemos llegar a tener una configuración muy interesante.

Para cerrar paneles lo haremos con la combinación Prefix+x y nos pedirá confirmación para cerrarlo.

Cuando tenemos paneles creados, podemos movernos entre ellos con las combinaciones Prefix+[flechas]Junto con los paneles también se han diseñado unos layouts para distribuir nuestros paneles por la ventana, la combinación Prefix+Space va saltando circularmente por los diferentes layouts.

Configuración de tmux

Todo lo que hemos visto hasta ahora está basado en las configuraciones por defecto de tmux, pero practicamente todo puede ser configurado, para que se adapte a nosotros.

Las configuraciones de tmux se realizan en un archivo que está en la raíz de nuestra home que se llama .tmux.conf (el punto inicial indica que es un archivo oculto).

Modificando prefix

Un ejemplo es la combinación prefijo, que mucha gente la configura para que sea Ctrl+a.

El motivo de elegir este prefix se debe a que muchos desarrolladores han modificado la configuración de teclado para que la tecla de Bloqueo de mayúsculas actúe como Ctrl, así está al lado de la tecla a y es más natural la combinación.

Para modificar esta combinación, editaremos nuestro fichero .tmux.conf con nuestro editor favorito y configuraremos estas líneas.


# Establece Ctrl+a como prefix
set -g prefix C-a
# Quita Ctrl+b como prefix
unbind C-b
# Permite poder enviar Ctrl+a a otras aplicaciones que utilicen
# esta combinación
bind C-a send-prefix

Modificar la creación de paneles

Por defecto, la combinación para crear paneles horizontales y verticales parecen un poco extrañas, podemos remapearlas a otra combinación que tenga más sentido para nosotros, por ejemplo:


# splitting panes with | and -
bind | split-window -h
bind - split-window -v

Con esta configuración podemos crear un panel vertical con Prefix+| y uno horizontal con Prefix+-.

Ejemplos

Hasta ahora hemos visto mucha teoría de esta aplicación y como configurar algunas de sus opciones, pero no hemos visto casos reales de cómo funciona y dónde podemos sacarle provecho, así, que aquí os añado un par de capturas de pantalla de dos entornos diferentes donde podemos sacarle partido.

El primero es la pantalla de un administrador de sistemas gestionando un servidor donde tenemos un panel principal con el editor vim, un segundo panel, donde se va volcando el contenido de un log y el tercero tenemos un proceso top abierto, para ver el consumo de cada proceso.

Captura de pantalla de un sysadmin gestionando un servidor con tmux

Y el segundo ejemplo una pantalla de un desarrollador, donde en el panel principal está el proyecto abierto en vim, otro panel con los logs del proyecto, y el tercero, un watcher de webpack para compilar los assets a medida que se van editando.

Captura de pantalla de un developer ejecutando diversas tareas de un proyecto con tmux

Conclusión

Como hemos visto, tmux es una gran herramienta tanto para administradores de sistemas como para desarrolladores a los que les gusta la línea de comandos y quieren sacar más potencial a la terminal estándar que traen los sistemas operativos.

Podemos encontrar más información en este libro online

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s