Cómo usar tmux en Linux (y por qué es mejor que screen)

El comando tmux de Linux es un multiplexor de la terminal, como screen. Sus defensores son muchos, por lo que decidimos comparar los dos. ¿Es realmente tmux mejor, o es solo un caso de preferir lo que conoces?

tmux vs. screen

Tanto los comandos tmux como screen son multiplexores terminales. Te permiten tener múltiples ventanas dentro de una sola ventana de la terminal, y saltar entre ellas.

Una ventana se puede dividir en paneles, cada uno de los cuales te brinda una línea de comandos independiente.

También puedes separar una sesión y se convierte en una entidad sin encabezado que se ejecuta en segundo plano. Incluso puedes cerrar la ventana de la terminal que la inició. Cuando estés listo, puedes abrir una nueva ventana de la terminal y volver a conectar la sesión aún en ejecución. También puedes hacerlo a través de una conexión SSH.

Puedes separar una sesión en una computadora, ir a casa e iniciar sesión en la computadora remota. Cuando te vuelves a conectar, puedes volver a conectar la sesión en segundo plano y volver a usarla de forma interactiva.

¿Qué es el comando screen?

El comando screen también es un multiplexor la terminal, y está repleto de opciones.

Esta vez, nos vamos a concentrar en tmux. A medida que avanzamos, mencionaremos cómo screen administra la misma característica o función.

Solo una cosa nos molestó sobre screen. Cubriremos eso cuando lleguemos a él, y veremos si las acciones de tmux superan a screen.

Instalar tmux

Si bien screen generalmente se instala por defecto en distribuciones populares de Linux, tmux no lo está. Para instalar tmux en Ubuntu, debes escribir lo siguiente:

En Manjaro puedes usar pacman:

En Fedora 31, tmux ya está instalado.

Inicio de una sesión tmux

Para comenzar tmux, solo escríbelo y presiona Enter:

La ventana de la terminal mostrará una barra de estado cuando estés en una sesión tmux.

El lado derecho de la barra de estado muestra el nombre del host, y la hora y la fecha. El lado izquierdo muestra la siguiente información relacionada con la sesión:

  • [0]: este es el nombre de la sesión. Por defecto, están numerados, comenzando con cero. Te mostramos cómo puedes dar nombres significativos a las sesiones a continuación.
  • 0: bash *: el 0 indica que esta es la primera ventana de esta sesión. El único proceso que se ejecuta en esta sesión es bash. Si ejecutas un programa, su nombre aparecerá aquí. El asterisco (*) significa que esta es la ventana que estás viendo. Cada vez que creas una nueva ventana en una sesión tmux, el número de ventana y el nombre del programa que se ejecuta en él se agregan a la barra de estado.

El comando screen no te da una barra de estado. Tienes que volar ciego y confiar en tu ingenio para saber qué está pasando, lo que requiere un poco de práctica.

En el lado positivo, no perderás una línea del estado real de la ventana de la terminal. Por supuesto, normalmente expandirías la ventana de tu terminal para que valga la pena usar un multiplexor de terminales.

Barra de estado

En ese caso, la pérdida de una línea para la barra de estado no es un gran problema. Hemos dejado las imágenes de las ventanas de la terminal aquí en el tamaño predeterminado para que puedas ver la información.

Te daremos comandos para tmux usando algunos atajos de teclado, y hay dos partes en esto. Primero, presiona Ctrl + B para llamar la atención de tmux. Luego, presiona rápidamente la siguiente tecla para enviar un comando tmux. Los comandos se dan presionando letras, números, signos de puntuación o teclas de dirección.

Es lo mismo que con screen, excepto que presionas Ctrl + A para llamar su atención.

Para cerrar la ventana, presione Ctrl + B y luego presionar rápidamente X. La barra de estado se vuelve ámbar. Luego se te solicita que confirmes que desea cerrar la ventana.

Debes presionar Y para cerrar la ventana o N si cambias de opinión. No tienes que presionar Enter después; S o N es suficiente para registrar tu elección.

Si presionas Y, la ventana se cierra. Debido a que esta es la única ventana en esta sesión, la sesión finaliza.

La sesión tmux se cierra y vuelve a la línea de comandos desde la que iniciaste tmux. Verás “[ exited]” en la ventana de terminal.

Esto puede parecer que dice lo obvio, pero es una confirmación de que cerraste la sesión y no la dejaste desconectada y ejecutándose. Discutiremos las sesiones de separación a continuación.

Inicio de una sesión tmux con nombre

Si inicia varias sesiones tmux regularmente, apreciarás rápidamente la funcionalidad de darles un nombre significativo a cada una de ellas. También puedes nombrar sesiones en screen, pero no se muestran en ninguna parte de las ventanas de la sesión.

Para comenzar tmux con un nombre de sesión, debes usar el comando new (nueva sesión) y la opción –s (nombre de sesión). Nuestra sesión se llamará “geek-1”, por lo que escribimos lo siguiente:

Cuando se carga la sesión tmux, se muestra “geek-1” como la primera entrada en la barra de estado, en el extremo izquierdo.

Agregar más ventanas

Para crear una nueva ventana en la sesión actual, presiona Ctrl + B y luego C. Obtendrás una ventana de la terminal en blanco en la sesión actual. Entonces, tendremos algo ejecutándose en esta nueva ventana, iniciemos el comando dmesg con la opción –w (seguir):

Ahora tenemos dos ventanas en la sesión; una está ejecutando top y la otra dmesg. Sin embargo, solo podemos ver uno a la vez (más sobre eso en un momento).

Debes echar un vistazo al lado izquierdo de la barra de estado. Todavía estamos en la sesión tmux “geek-1”. En la ventana cero, se está ejecutando top, y en la ventana uno, se está ejecutando dmesg. El asterisco (*) después dmesg nos dice qué ventana es visible.

Para saltar entre ventanas, debes presionar Ctrl + B, y luego una de las siguientes teclas:

  • N: muestra la siguiente ventana.
  • P: muestra la ventana anterior.
  • 0 a 9: muestra una ventana numerada del 0 al 9.

También puede elegir una ventana de una lista. Si presionas Ctrl + B y luego W, aparece una lista de ventanas.

Para mover la barra de resaltado ámbar, debes presionar las flechas hacia arriba o hacia abajo, Inicio o Fin. La sección inferior de la pantalla muestra una vista previa del contenido en la ventana resaltada.

Presiona Enter para moverte a la ventana resaltada, o Esc para salir de la lista de ventanas sin cambiar.

Separar y adjuntar sesiones

Si presionas Ctrl + B y luego D, separarás la sesión. Continuará ejecutándose en segundo plano, pero no podrás verla ni interactuar con ella.

Iniciamos top en la sesión, así que tenemos un proceso en ejecución para demostrar. Luego, presionamos Ctrl + B, y luego D. La sesión desaparece y se convierte en una sesión en segundo plano.

Regresamos a la ventana de la terminal original. Hay un mensaje de tmux que nos dice que la sesión está separada. También nos recuerda el nombre que le dimos a la sesión. Esto es útil porque eso es lo que usamos para adjuntar a una sesión en segundo plano y luego restaurarla a una sesión interactiva.

Para adjuntar una sesión separada, usaremos el comando autoexplicativo attach-session con la opción –t (sesión de destino). También proporcionaremos el nombre de la sesión que deseamos recordar.

Escribimos lo siguiente:

Nuestra sesión regresa y se convierte en una sesión visible e interactiva nuevamente.

Los procesos continuos o de larga duración que iniciaste antes de separar la sesión aún se ejecutarán en segundo plano. Esto a menos que hayan finalizado cuando adjuntes la sesión.

screen puede hacer esto, pero no tan intuitivamente.

Manejo de múltiples sesiones

Abramos otra ventana de la terminal y comencemos una nueva sesión tmux llamada “geek-2”:

En esa sesión, iniciaremos dmesg:

Ahora, tenemos nuestra sesión tmux original “geek-1, y una nueva llamada “geek-2”.

La barra de estado nos muestra que esta sesión se llama “geek-2”, y tiene una ventana que ejecuta dmesg.

Si presionamos Ctrl + B, y luego D, separamos esa sesión.

De vuelta en la sesión tmux “geek-1”, presionamos Ctrl + B, y luego S para ver una lista de sesiones tmux.

Para ser claros, esta es una lista de sesiones. La pantalla similar que vimos anteriormente era una lista de ventanas en una sola sesión.

Puedes mover la barra de resaltado ámbar presionando las flechas hacia arriba y hacia abajo, Inicio y Fin. La sección inferior muestra una vista previa del contenido en la sesión resaltada.

Si presionas la flecha derecha, se muestran las ventanas para la sesión resaltada.

Debes presionar Enter para moverte a la sesión o ventana resaltada o Esc para salir de la lista de sesiones sin cambiar las sesiones. Si seleccionas una nueva sesión, la actual se separa y se adjunta la que seleccionaste.

Separamos la sesión “geek-2” antes de hacer esto. Sin embargo, puedes hacer esto con sesiones que todavía están conectadas a tus ventanas de la terminal originales. Cuando lo hagas, cualquier cambio de pantalla aparecerá simultáneamente en ambas sesiones tmux.

El comando screen también puede hacer esto a través de un conjunto similar de comandos.

Trabajando con paneles de ventana

Si presionas Ctrl + B y luego las comillas dobles (“”), divides la ventana horizontalmente en dos paneles.

Esto solo afecta a la ventana actual; los otros en la sesión no serán cambiados. Hemos utilizado el comando tmux ls en el panel superior para enumerar las ventanas en esta sesión.

Hay dos, y la línea de estado nos dice que estamos en la ventana uno. Si saltamos a la ventana cero presionando Ctrl + B, y luego 0 (cero), vemos que es exactamente como la dejamos.

Estas son dos líneas de comando independientes, no dos vistas en una ventana; son shells distintas y separadas. Podemos mostrar esto ejecutando un comando diferente en cada panel.

Escribimos lo siguiente:

Para pasar de un panel a otro, debes presionar Ctrl + B y luego la flecha hacia arriba, abajo, hacia la izquierda o la derecha.

Si presionas Ctrl + B, y luego el signo de porcentaje (%) divides el panel actual verticalmente.

Debes presionar Ctrl + B y luego Q para hacer que tmux muestre brevemente el número de cada panel.

Estos números se usan en avisos y mensajes de tmux. Presiona Ctrl + B y luego X para cerrar el panel actual. La barra de estado cambia a ámbar y se te solicita que confirmes que deseas cerrar ese número de panel. Presiona Y para eliminar el panel, o N para dejar las cosas como están.

Si presionas Y, se elimina el panel.

El comando screen también tiene paneles, pero, de nuevo, son menos intuitivos de usar. Lo que nos molesta screen es que, si desconectas una sesión con paneles, desaparecen cuando vuelves a conectar esa sesión. Eso es muy molesto.

Trucos con Ctrl + B

Hemos incluido una hoja de trucos de los diferentes comandos que puedes usar en tmux continuación.

Comandos de sesión

  • S: Lista de sesiones.
  • $: Cambiar el nombre de la sesión actual.
  • D: Separar sesión actual.
  • Ctrl + B, y luego ?: Muestra la página de ayuda en tmux.

Comandos de ventana

  • C: Crear una nueva ventana.
  • ,: Cambia el nombre de la ventana actual.
  • W: Lista las ventanas.
  • N: pasar a la siguiente ventana.
  • P: Ir a la ventana anterior.
  • 0 a 9: mover al número de ventana especificado.

Comandos del panel

  • %: Crea una división horizontal.
  • “: Crea una división vertical.
  • H o flecha izquierda: muévete al panel de la izquierda.
  • I o flecha derecha: muévete al panel de la derecha.
  • J o flecha hacia abajo: muévete al panel de abajo.
  • K o flecha arriba: muévete al panel de arriba.
  • Q: Muestra brevemente los números de los paneles.
  • O: puedes moverte por los paneles en orden. Cada pulsación te lleva a la siguiente, hasta que recorras todas ellas.
  • }: Intercambia la posición del panel actual con el siguiente.
  • {: Intercambia la posición del panel actual con el anterior.
  • X: cierra el panel actual.

Cómo se comparan

En términos de funcionalidad, tanto screen y tmux funcionan de manera similar y ofrecen las mismas características principales. Es la forma en que accedes a esas funciones que es marcadamente diferente. tmux ofrece formas más cómodas y fáciles de acceder a las diversas funciones. Sin embargo, esa no es la única diferencia.

La capacidad de cambiar el nombre de las sesiones y las ventanas en tmux es clara. También el hecho de que conserve los paneles cuando vuelves a conectar una sesión es una gran característica

screen, por otro lado, pierde completamente los paneles cuando desconectas y vuelves a conectar una sesión. Esto es casi lo suficientemente molesto como para evitar que lo coloquemos sobre tmux.

Hay mucho más por hacer en tmux, incluidas sus capacidades de scripting increíblemente flexibles. Pero esto, debes comprobarlo tú mismo.